Changes

Graduate Software

5,462 bytes added, 18:44, 23 July 2024
fix table formatting
Graduate software provided Software was a version of CP/M+ on ROMcompany founded in Bristol by three people including Roger Bamkin and Simon Champion.
Additional 'utility' roms contained They provided a version of CP/M programs installed + on a ROM2 16KB ROMs. These were standard CPC firmware compatible ROMs.
These ROMs were available in their own ROM board expansion. To get their CPM you were required to send them your system discs and essentially they provided a transfer service so they didn't infringe on Digital Research's copyright or distribution policy. The ROM they provided had your address and serial number encoded on the ROM. A script has been written to update these details which can be downloaded from [https://github.com/cormacj/AmstradCPCRomHacks here]. == RSX/ROM Commands == {| class="wikitable"|-! scope="col" width="100" | RSX! Details|-| <nowiki>|EMS</nowiki>| rowspan="2" | Starts CP/M Plus from ROM and shows the CP/M Plus expansion ROMs with their names. CP/M Plus is configured for two drives and the RAM drive C: with 444 KB RAM.|-| <nowiki>|O</nowiki>|-| <nowiki>|PASSWORD</nowiki>| This command asks you for a password. If you enter it three times wrong then CP/M Plus will be started from ROM. The default password in the available 2.34 ROM is <code>SPLINTER</code>|-| <nowiki>|PW</nowiki>| If the password was entered correctly using <nowiki>|PASSWORD</nowiki> then <nowiki>|PW</nowiki> will do nothing. If the password was not entered, or entered incorrectly then it will start CP/M, just like <nowiki>|EMS</nowiki> |-| <nowiki>|OP</nowiki>| This RSX command activates a menu system, which allows you to launch a .COM or .SUB file in an automatic way. An error message will be displayed if there is no .COM or .SUB file on disc. You can choose the file of choice with SPACE and start it with RETURN. CP/M PLUS with the RAM Disc will be started and the selected file will be launched. <p>Note: Some print routine are incompatible, for example this is the case for X-DDOS. Switch off if you find problems.|-| <nowiki>|VER</nowiki>| rowspan="2" | These commands are both identical. They show the Copyright message for CP/M PLUS and the CPM ROMs. Additionally, the serial number and the name of the user is also printed.|-| <nowiki>|CPMVER</nowiki>||-| <nowiki>|MYNAME</nowiki>| Displays the name of the user/buyer of this set of CP/M Plus ROMs on screen.|-| <nowiki>|OHELP</nowiki>| rowspan="2" | These commands are both identical. They list any CP/M Plus expansion ROMs containing programs (if installed). showing their name and position (ROM number). Using <nowiki>|OHELP</nowiki>,number or <nowiki>|EMSHELP</nowiki>,number will display the applications contained in CP/M Plus expansion ROM #number, for example <nowiki>|OHELP,6</nowiki>|-| <nowiki>|EMSHELP</nowiki>||-| <nowiki>|NOCPM</nowiki>| This RSX command will switch OFF the CP/M Plus expansion ROMs. All other ROMs will be initialiized again.|-|} == Technical == * CPM+ is stored in ROM 2 and is copied into RAM. It appears to copy the equivalent of the EMS file but with patches.* AMSDOS ROM is required for the final part of the boot process. == Accessory/Utility ROM == Graduate's ROM based CPM allows CPM software to be installed in special Accessory ROMs. They produced one [[CPM_Accessory_ROM_1]]but you could buy more from them with the programs you wanted to be installed. A utility ROM can exist in any ROM slot from 1 to 15 - these are the slots checked by the ROM. [[TFM]] has written ROMManager which can create these accessory ROMs and he provides downloads on his website for some that he has made himself. [[User:Cormacj|CormacJ]] has written a python script to create accessory ROMS and also extract .COM files from ROMS. You can view this at his [https://github.com/cormacj/AmstradCPCRomHacks?tab=readme-ov-file#make_accessory_rompy AmstradCPCRomHacks] repository Some emulators don't support the accessory ROMs because of the non-standard format. Arnold and Caprice32 supports these.
=== Structure of a utility ROM ===
| ''Description''
|-
| 0&00| 4816| Description of ROM identification (note 1)|-| &10| 22| Extension ROM name (note 2)
|-
| &30
| 2088| Loading ?|-| &38| 56| startup code (?) (extension ROM has &c9). This is executed.|-| &70| 144| Common code to load files from ROM (note 23)
|-
| &100
| 256
| Directory (note 34)
|-
| &200
| &3e00
| Data area for files.(note 5)
|}
| 0
| 8
| Filename (note 46)
|-
| 8
| 9
| 2
| address in ROM for start of data for file (note 37)
|-
| 11
| 2
| length in bytes of file
|-
| 13
| 1
| length of filename in chars (excluding padding)
|-
| 14
=== Notes ===
1. Utility ROM 1 has this descriptionIdentification: "Graduate (C)1988 CP/M Accessory Rom 1\r\n$VER 2.30 ". Only the first char 'G' is checked.
2. Accessory ROM name is ASCII string terminated with '$'. Graduate's Accessory ROM 1 is called "CP/M Accessory Rom 1\r\n$". You need to provide a description. At a minimum '$' on it's own is ok. The code displays the string and doesn't check if it goes past the space allocated in the ROM. Some documentation notes that this can be 32 characters long, but the Graduate Software roms will only display up to 22 characters.  3. Loading code is required. A dissassembly is shown below. The CP/M ROM executes it. Code is copied from &c000-c070 (length &c100 200) to &3f00-&4000 3f70 in RAMtherefore copying both the loading code and the directory.
;; HL = address of directory entry
;; A = rom number
0070 3f70 32be3f ld (3fbeh),a ;; ROM number store to RAM 0073 3f73 e5 push hl 0074 3f74 dde1 pop ix 0076 3f76 2afefb ld hl,(0fbfeh) 0079 3f79 113400 ld de,0034h 007c 3f7c 19 add hl,de 007d 3f7d 118c3f ld de,3f8ch ;; address to call to load file from ROM 0080 3f80 73 ld (hl),e 0081 3f81 23 inc hl 0082 3f82 72 ld (hl),d 0083 3f83 2afefb ld hl,(0fbfeh) 0086 3f86 111000 ld de,0010h 0089 3f89 0e3b ld c,3bh 008b 3f8b e9 jp (hl)
008c ;; load file from ROM into RAM 3f8c dd6e00 ld l,(ix+00h) ;; load address 008f 3f8f dd6601 ld h,(ix+01h) 0092 3f92 dd4e02 ld c,(ix+02h) ;; length 0095 3f95 dd4603 ld b,(ix+03h) 0098 3f98 110001 ld de,0100h ;; load address for .COM file 009b 3f9b cdbf3f call 3fbfh ;; read byte from rom 009e 3f9e 12 ld (de),a ;; write to memory 009f 3f9f 13 inc de 00a0 3fa0 23 inc hl 00a1 3fa1 0b dec bc 00a2 3fa2 79 ld a,c 00a3 3fa3 b0 or b 00a4 3fa4 20f5 jr nz,009bh
00a6 3fa6 1eff ld e,0ffh ;; error code in H 00a8 3fa8 0e2d ld c,2dh ;; F_ERRMODE - set action on hardware error 00aa 3faa cd0500 call 0005h ;; call BDOS 00ad 3fad 3aaffb ld a,(0fbafh) 00b0 3fb0 5f ld e,a 00b1 3fb1 0e0e ld c,0eh ;; select disc 00b3 3fb3 cd0500 call 0005h ;; call BDOS 00b6 3fb6 1e00 ld e,00h 00b8 3fb8 0e2d ld c,2dh ;; F_ERRMODE - set action on hardware error 00ba 3fba cd0500 call 0005h;; call BDOS 00bd 3fbd c9 ret
00be 3fbe 00 nop ;; storage for ROM number
;; read byte from ROM
00bf 3fbf c5 push bc 00c0 3fc0 3abe3f ld a,(3fbeh) 00c3 3fc3 4f ld c,a 00c4 3fc4 cdc93f call 3fc9h 00c7 3fc7 c1 pop bc 00c8 3fc8 c9 ret
;; HL = address to read from ROM
;; C = rom number
;; BC' = 7F80 port number
00c9 3fc9 f3 di 00ca 3fca c5 push bc 00cb 3fcb d9 exx 00cc 3fcc cb99 res 3,c ;; enable upper rom 00ce 3fce ed49 out (c),c 00d0 3fd0 d9 exx 00d1 3fd1 06df ld b,0dfh ;; select ROM 00d3 3fd3 ed49 out (c),c 00d5 3fd5 7e ld a,(hl) ;; read byte from ROM 00d6 3fd6 d9 exx 00d7 3fd7 cbd9 set 3,c ;; disable upper rom 00d9 3fd9 ed49 out (c),c 00db 3fdb d9 exx 00dc 3fdc fb ei 00dd 3fdd c1 pop bc 00de 3fde c9 ret   ;; used? ;; BC = 7F8x with bit 3 clear. bits 1,0 are mode. ;; HL = address to read from ROM 3fdf ed49 out (c),c ;; must enable ROM 3fe1 d9 exx 3fe2 06df ld b,0dfh ;; select ROM 3fe4 ed49 out (c),c 3fe6 7e ld a,(hl) ;; read from rom 3fe7 d9 exx 3fe8 cbd9 set 3,c ;; disable ROM again 3fea ed49 out (c),c 3fec d9 exx 3fed fb ei 3fee c1 pop bc 3fef c9 ret  4. Up to 16 files can be defined. Each file takes 1 entry. Unused entries are filled with &FF. 5. The accessory ROM boot program can be replaced and if needed exended by re-using some of the data area for code. In this case allocate your programs to account for this. 6. Filename is in upper case, 8 characters long, padded with spaces. '.COM' extension is assumed. 7. ROM starts at &c000. Therefore &c200 is the start of the first file.
;; 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 Registered user ==
3. Up to 16 files can be defined. Each file takes The name, address and serial number of the registered user is stored in ROM 1 entryat offset &3f00. Unused entries are filled It uses a simple encryption by XORing bytes with &FF4E.
4. Filename == Password ==The password for |PASSWORD is in upper case, 8 characters long, padded with spaces. '.COM' extension SPLINTER''This is assumed when accessed stored in ROM 1 at offset &3f88. It uses a simple encryption by XORing bytes with &AA.
5. ROM starts at &c000. Therefore &c200 is the start of the first file.== Links ==
* [[http://futureos.cpc-live.com/ Future OS website, home of ROM Manager and TFM's Accessory ROMs]]* [https://github.com/cormacj/AmstradCPCRomHacks Python scripts to build your own accessory roms and to patch the CPM rom to update user, address, serial and password message][[Category:Operating System]][[Category:Expansion ROM]][[Category:CP/M]]
143
edits