Difference between revisions of "Graduate Software"
From CPCWiki - THE Amstrad CPC encyclopedia!
								
												
				|  (→Notes) |  (→Notes) | ||
| Line 63: | Line 63: | ||
| 1. Utility ROM 1 has this description: "Graduate (C)1988 CP/M Accessory Rom 1\r\n$VER 2.30 " | 1. Utility ROM 1 has this description: "Graduate (C)1988 CP/M Accessory Rom 1\r\n$VER 2.30 " | ||
| − | 2. | + | 2. Code is copied from &c000-&c100 to &3f00-&4000 in RAM. | 
| − |   0070 32be3f    ld      (3fbeh),a | + |  ;; HL = address of directory entry | 
| + |  ;; A = rom number | ||
| + |   0070 32be3f    ld      (3fbeh),a ;; ROM number store to RAM | ||
|   0073 e5        push    hl |   0073 e5        push    hl | ||
|   0074 dde1      pop     ix |   0074 dde1      pop     ix | ||
| − |   0076 2afefb    ld      hl,(0fbfeh) | + |   0076 2afefb    ld      hl,(0fbfeh)   | 
|   0079 113400    ld      de,0034h |   0079 113400    ld      de,0034h | ||
|   007c 19        add     hl,de |   007c 19        add     hl,de | ||
| − |   007d 118c3f    ld      de,3f8ch | + |   007d 118c3f    ld      de,3f8ch ;; address to call to load file from ROM | 
|   0080 73        ld      (hl),e |   0080 73        ld      (hl),e | ||
|   0081 23        inc     hl |   0081 23        inc     hl | ||
|   0082 72        ld      (hl),d |   0082 72        ld      (hl),d | ||
| − |   0083 2afefb    ld      hl,(0fbfeh) | + |   0083 2afefb    ld      hl,(0fbfeh)   | 
|   0086 111000    ld      de,0010h |   0086 111000    ld      de,0010h | ||
|   0089 0e3b      ld      c,3bh |   0089 0e3b      ld      c,3bh | ||
|   008b e9        jp      (hl) |   008b e9        jp      (hl) | ||
| − |   008c dd6e00    ld      l,(ix+00h) | + |   008c dd6e00    ld      l,(ix+00h) ;; load address | 
|   008f dd6601    ld      h,(ix+01h) |   008f dd6601    ld      h,(ix+01h) | ||
| − |   0092 dd4e02    ld      c,(ix+02h) | + |   0092 dd4e02    ld      c,(ix+02h) ;; length | 
|   0095 dd4603    ld      b,(ix+03h) |   0095 dd4603    ld      b,(ix+03h) | ||
| − |   0098 110001    ld      de,0100h | + |   0098 110001    ld      de,0100h   ;; load address for .COM file | 
| − |   009b cdbf3f    call    3fbfh | + |   009b cdbf3f    call    3fbfh      ;; read byte from rom | 
| − |   009e 12        ld      (de),a | + |   009e 12        ld      (de),a     ;; write to memory | 
|   009f 13        inc     de |   009f 13        inc     de | ||
|   00a0 23        inc     hl |   00a0 23        inc     hl | ||
| Line 94: | Line 96: | ||
|   00a4 20f5      jr      nz,009bh |   00a4 20f5      jr      nz,009bh | ||
| − |   00a6 1eff      ld      e,0ffh | + |   00a6 1eff      ld      e,0ffh ;; error code in H | 
| − |   00a8 0e2d      ld      c,2dh | + |   00a8 0e2d      ld      c,2dh  ;; F_ERRMODE - set action on hardware error | 
|   00aa cd0500    call    0005h |   00aa cd0500    call    0005h | ||
|   00ad 3aaffb    ld      a,(0fbafh) |   00ad 3aaffb    ld      a,(0fbafh) | ||
|   00b0 5f        ld      e,a |   00b0 5f        ld      e,a | ||
| − |   00b1 0e0e      ld      c,0eh | + |   00b1 0e0e      ld      c,0eh ;; select disc | 
|   00b3 cd0500    call    0005h |   00b3 cd0500    call    0005h | ||
|   00b6 1e00      ld      e,00h |   00b6 1e00      ld      e,00h | ||
| − |   00b8 0e2d      ld      c,2dh | + |   00b8 0e2d      ld      c,2dh ;; F_ERRMODE - set action on hardware error | 
|   00ba cd0500    call    0005h |   00ba cd0500    call    0005h | ||
|   00bd c9        ret       |   00bd c9        ret       | ||
| − |   00be 00        nop       | + |   00be 00        nop     ;; storage for ROM number | 
| + | |||
| + |  ;; read byte from ROM | ||
|   00bf c5        push    bc |   00bf c5        push    bc | ||
|   00c0 3abe3f    ld      a,(3fbeh) |   00c0 3abe3f    ld      a,(3fbeh) | ||
| Line 114: | Line 118: | ||
|   00c8 c9        ret         |   00c8 c9        ret         | ||
| + |  ;; HL = address to read from ROM | ||
| + |  ;; C = rom number | ||
| + |  ;; BC' = 7F80 port number | ||
|   00c9 f3        di        |   00c9 f3        di        | ||
|   00ca c5        push    bc |   00ca c5        push    bc | ||
|   00cb d9        exx       |   00cb d9        exx       | ||
| − |   00cc cb99      res     3,c | + |   00cc cb99      res     3,c   ;; enable upper rom | 
|   00ce ed49      out     (c),c |   00ce ed49      out     (c),c | ||
|   00d0 d9        exx       |   00d0 d9        exx       | ||
| − |   00d1 06df      ld      b,0dfh | + |   00d1 06df      ld      b,0dfh ;; select ROM | 
|   00d3 ed49      out     (c),c |   00d3 ed49      out     (c),c | ||
| − |   00d5 7e        ld      a,(hl) | + |   00d5 7e        ld      a,(hl) ;; read byte from ROM | 
|   00d6 d9        exx       |   00d6 d9        exx       | ||
| − |   00d7 cbd9      set     3,c | + |   00d7 cbd9      set     3,c    ;; disable upper rom | 
|   00d9 ed49      out     (c),c |   00d9 ed49      out     (c),c | ||
|   00db d9        exx       |   00db d9        exx       | ||
| Line 130: | Line 137: | ||
|   00dd c1        pop     bc |   00dd c1        pop     bc | ||
|   00de c9        ret       |   00de c9        ret       | ||
| − | + | ||
| − |   00df ed49      out     (c),c | + | ;; used? | 
| + | ;; BC = 7F8x with bit 3 clear. bits 1,0 are mode. | ||
| + | ;; HL = address to read from ROM | ||
| + |   00df ed49      out     (c),c ;; must enable ROM | ||
|   00e1 d9        exx       |   00e1 d9        exx       | ||
| − |   00e2 06df      ld      b,0dfh | + |   00e2 06df      ld      b,0dfh ;; select ROM | 
|   00e4 ed49      out     (c),c |   00e4 ed49      out     (c),c | ||
| − |   00e6 7e        ld      a,(hl) | + |   00e6 7e        ld      a,(hl) ;; read from rom | 
|   00e7 d9        exx       |   00e7 d9        exx       | ||
| − |   00e8 cbd9      set     3,c | + |   00e8 cbd9      set     3,c  ;; disable ROM again | 
|   00ea ed49      out     (c),c |   00ea ed49      out     (c),c | ||
|   00ec d9        exx       |   00ec d9        exx       | ||
Revision as of 12:00, 28 April 2018
Graduate software provided a version of CP/M+ on ROM.
Additional 'utility' roms contained CP/M programs installed on a ROM.
Structure of a utility ROM
Each ROM is 16KB and has the following structure:
| Offset (Hex) | Count | Description | 
| 0 | 48 | Description of ROM (note 1) | 
| &30 | 208 | Loading code (note 2) | 
| &100 | 256 | Directory (note 3) | 
| &200 | &3e00 | Data area for files. | 
Each directory entry has the following structure:
| Offset (Hex) | Count | Description | 
| 0 | 8 | Filename (note 4) | 
| 8 | 1 | ? (unknown &20) | 
| 9 | 2 | address in ROM for start of data for file (note 3) | 
| 11 | 2 | length in bytes of file | 
| 14 | 2 | (unknown) &feff | 
Notes
1. Utility ROM 1 has this description: "Graduate (C)1988 CP/M Accessory Rom 1\r\n$VER 2.30 "
2. Code is copied from &c000-&c100 to &3f00-&4000 in RAM.
;; HL = address of directory entry ;; A = rom number 0070 32be3f ld (3fbeh),a ;; ROM number store to RAM 0073 e5 push hl 0074 dde1 pop ix 0076 2afefb ld hl,(0fbfeh) 0079 113400 ld de,0034h 007c 19 add hl,de 007d 118c3f ld de,3f8ch ;; address to call to load file from ROM 0080 73 ld (hl),e 0081 23 inc hl 0082 72 ld (hl),d 0083 2afefb ld hl,(0fbfeh) 0086 111000 ld de,0010h 0089 0e3b ld c,3bh 008b e9 jp (hl)
008c dd6e00 ld l,(ix+00h) ;; load address 008f dd6601 ld h,(ix+01h) 0092 dd4e02 ld c,(ix+02h) ;; length 0095 dd4603 ld b,(ix+03h) 0098 110001 ld de,0100h ;; load address for .COM file 009b cdbf3f call 3fbfh ;; read byte from rom 009e 12 ld (de),a ;; write to memory 009f 13 inc de 00a0 23 inc hl 00a1 0b dec bc 00a2 79 ld a,c 00a3 b0 or b 00a4 20f5 jr nz,009bh
00a6 1eff ld e,0ffh ;; error code in H 00a8 0e2d ld c,2dh ;; F_ERRMODE - set action on hardware error 00aa cd0500 call 0005h 00ad 3aaffb ld a,(0fbafh) 00b0 5f ld e,a 00b1 0e0e ld c,0eh ;; select disc 00b3 cd0500 call 0005h 00b6 1e00 ld e,00h 00b8 0e2d ld c,2dh ;; F_ERRMODE - set action on hardware error 00ba cd0500 call 0005h 00bd c9 ret 00be 00 nop ;; storage for ROM number
;; read byte from ROM 00bf c5 push bc 00c0 3abe3f ld a,(3fbeh) 00c3 4f ld c,a 00c4 cdc93f call 3fc9h 00c7 c1 pop bc 00c8 c9 ret
;; HL = address to read from ROM ;; C = rom number ;; BC' = 7F80 port number 00c9 f3 di 00ca c5 push bc 00cb d9 exx 00cc cb99 res 3,c ;; enable upper rom 00ce ed49 out (c),c 00d0 d9 exx 00d1 06df ld b,0dfh ;; select ROM 00d3 ed49 out (c),c 00d5 7e ld a,(hl) ;; read byte from ROM 00d6 d9 exx 00d7 cbd9 set 3,c ;; disable upper rom 00d9 ed49 out (c),c 00db d9 exx 00dc fb ei 00dd c1 pop bc 00de c9 ret
- used?
- BC = 7F8x with bit 3 clear. bits 1,0 are mode.
- HL = address to read from ROM
00df ed49 out (c),c ;; must enable ROM 00e1 d9 exx 00e2 06df ld b,0dfh ;; select ROM 00e4 ed49 out (c),c 00e6 7e ld a,(hl) ;; read from rom 00e7 d9 exx 00e8 cbd9 set 3,c ;; disable ROM again 00ea ed49 out (c),c 00ec d9 exx 00ed fb ei 00ee c1 pop bc 00ef c9 ret
3. Up to 16 files can be defined. Each file takes 1 entry. Unused entries are filled with &FF.
4. Filename is in upper case, 8 characters long, padded with spaces. '.COM' extension is assumed when accessed.
5. ROM starts at &c000. Therefore &c200 is the start of the first file.
