Difference between revisions of "Graduate Software"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(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.