CPUville Z80 Computer Disk and Memory Expansion Instruction ManualBy Donn Stewart© 2014 by Donn Stewart1
Testing and Using the Disk and Memory ExpansionThe following sections assume you are familiar with using the CPUville Z80 computer with the serial int
Do the same with the serial interface board, on the right-side connectors. Do not connect a disk to the board at this time.The main computer should ha
You see the same set of commands used in the monitor program version 7, with some new additions. They are diskrd, diskwr, and cpm.The diskrd commandTh
If the memory test fails, recheck the pins of the RAM ICs to make sure they are seated properly. If you cannot get it to work, please contact me for a
make it as simple as possible. I did not have any need to use disk space efficiently – I was using a 1 Gb solid-state drive when I developed the syste
If you are using a compact flash drive in an IDE adapter, you may be able to get power from pin 20 of the drive connector, instead of using separate w
sector if you want to use this command to start the operating system. I suggest you do not try to preserve partitions on your disk, but rather dedicat
You can use whatever pattern you like, but it should be easily recognizable.Now, write the memory page at 0x0800 to disk sector 0 using the diskwr com
If you see your data pattern there, you know your disk is working properly, and you can read and write sectors. You can experiment with other patterns
Permission to use CP/M for hobbyist and educational purposes has generally been granted freely, but since I am a commercial enterprise I cannot give y
Table of ContentsIntroduction...
CHKSUM1: ADD A,(HL) ;and compute sum ignoring carries. INC HL DEC C JP NZ,CHKSUM1 RET ;Those are the only code changes that must be made. However, as
CMMND1: LD SP,CCPSTACK ;set stack straight. CALL CRLF ;start a new line on the screen. CALL GETDSK ;get current drive. ADD A,'a' CALL PRINT
This is important to remember, because in order to prepare the disk, we will need to use the CBIOS calls for writing 0xE5 to the disks. That way, we w
The Drive Activity LED should light up for about a minute and a half while the format program fills the CP/M disk with 0xE5. When the light goes off,
Then, use bload to place the putsys.bin file into memory at location 0x0800:Now, run the putsys program at 0x0800. The drive activity light will light
We will use the bload command to first place the file cpm_loader.bin into the computer memory, then use the diskwr command to put it into sector 0 on
7. Run putsys.bin8. Load cpm_loader.bin at 0x08009. Write the memory page 0x0800 to disk sector 010. Reset the computer11. Start CP/M using the monito
We can rename the file with the REN command:Note that the target file name comes first in the argument for the REN command. Each disk maintains a sepa
You can see user 1 has no files on disk A. Now create a file, with the name test2.com. Switch back to user 0, and display the directory. You see only
enter the disk letter followed by a colon:If you try to access a disk that is not available, you will get an error message. Hit return and the system
IntroductionThe CPUville Disk and Memory Expansion Board is designed to provide the CPUville Z80 computer with 64K RAM memory and an IDE disk interfac
binary file into memory at 0x0100 , switch to CP/M, and use the built in SAVE command to create a .COM file.So how to get the RAM monitor program itse
Now we can safely load the RAM monitor into memory at 0xDBF2:31
Then, we run some tiny code (again entered with the load command) to switch to memory configuration 1 and run the RAM monitor:0800 D3 01 out (1),A ;sw
Now switch to CP/M by entering the monitor cpm command. When CP/M starts (it does a warm boot here), it copies its code from the disk to the memory lo
Check the disk directory, and you will see the MONITOR.COM file in place. Once this file is on the disk, all we need to do is enter MONITOR at the CP/
commands can be obtained from The Unofficial CP/M Web Site. The binaries from a CP/M distribution disk are here: http://www.cpm.z80.de/download/cpm22-
If you execute the STAT command, you can see how much room is available on the active CP/M disk:If you give STAT a file name argument, it will tell yo
This concludes a description of the basics of using CP/M, including how to get binary files into the CP/M file system through the serial port of the Z
Disk and Memory Expansion Schematics and ExplanationsIDE InterfaceThe IDE interface portion of the disk and memory is simpler than you might suppose.
signals, with +5V and ground power lines, are brought to the disk and memory board through the P1 and P2 connectors. The data and control lines are pa
software OUT instructions to port 0 or port 1, respectively. This system is necessary because the Z80 computer executes code starting at 0x0000 when t
Memory Configuration LogicThis logic circuit creates the chip select signals for the ROM and RAM chips, depending on the configuration (see the Memory
• Assert CS_ROM if Configuration is 0, Mem_Req is asserted, and the address is 0x0000 to 0x07FF – that is, if A11 to A15 are all zero.• Assert CS_RAM0
Memory ICs and Configuration Flip-flopThe upper part of the schematic shows a logic circuit that creates a clock pulse that is fed to the configuratio
logic seen in the previous schematic. The outputs of the chip select logic will select one of the three memory ICs, either the ROM, or one of the two
Disk and Memory Expansion Parts Organizer and ListCapacitor, 0.01 uFceramic1Red LED22Resistor, 470 ohmYellow-Violet-Brown2DIL16 socket4DIL28 socket, 0
Selected Program ListingsROM monitor3# File 2K_ROM_8.asm 0000 ;ROM monitor for a system with serial interface and IDE disk and memory expansion board.
0005 d3 03 out (3),a ;write to control port 0007 3e 37 ld a,037h ;enable receive and transmit 0009 d3 03 out (3),a ;write to control port 000b c9 r
0039 c9 ret 003a ; 003a ;Binary dump to port. Send a stream of binary data from memory to serial output 003a ;Address of dump passed in HL, length of
006d 0c inc c ;inc counter 006e 3e 00 ld a,000h 0070 12 ld (de),a ;leaves zero-terminated string in buffer 0071 c3 52 00 jp get_line_next_char 0074 79
00a7 e1 pop hl ;get string target address 00a8 77 ld (hl),a ;store second char of string 00a9 23 inc hl ;point to third location 00aa 3e 00 ld a,000h
Building TipsSee the “Building Tips” section in the CPUville Z80 Computer Kit Instruction Manual for general help.The 40-pin IDE drive connector in th
00d6 cb 27 sla a 00d8 cb 27 sla a 00da 57 ld d,a ;store high-nybble 00db 23 inc hl ;get next character of the pair 00dc 7e ld a,(hl) 00dd e5 push hl ;
0129 21 08 db decimal_entry: ld hl,buffer 012c cd 4c 00 call get_line ;returns with DE pointing to terminating zero 012f 21 08 db ld hl,buffer 0132 cd
0175 23 inc hl ;hl now points to next value 0176 22 04 db ld (value_pointer),hl 0179 2a 06 db ld hl,(current_value) ;get back current value 017c 3d de
01d3 cd 0c 00 call write_char 01d6 c3 a7 01 jp dump_next_byte ;continue 01d9 3e 00 dump_new_line: ld a,000h ;reset line count to zero 01db 32 02 db ld
022f ca 7b 02 jp z,load_done ;yes, quit 0232 32 09 db ld (buffer+1),a 0235 21 08 db ld hl,buffer 0238 cd c7 00 call hex_to_byte 023b da 71 02 jp c,loa
0289 ;Subroutine to start a new line 0289 3e 0d write_newline: ld a,00dh ;ASCII carriage return character 028b cd 0c 00 call write_char 028e 3e 0a ld
02cb db 0f in a,(0fh) ;check status 02cd e6 08 and 08h ;DRQ bit 02cf c2 c7 02 jp nz,read_loop ;loop until cleared 02d2 c9 ret 02d3 ; 02d3 ;Subroutine
030f db 0f in a,(0fh) ;clear INTRQ 0311 c9 ret 0312 ; 0312 ;Strings used in subroutines 0312 .. 00 length_entry_string: defm "Enter length of fil
0495 be match_loop: cp (hl) ;compare buffer char with match string char 0496 c2 a4 04 jp nz,no_match ;no match, go to next match string 0499 f6 00 or
04d5 cd fe 00 call address_entry 04d8 cd 89 02 call write_newline 04db cd 13 02 call memory_load 04de c3 6f 04 jp monitor_warm_start 04e1 ; 04e1 ;Jump
Once you have checked the parts you can start to solder them onto the circuit board.The easiest way to solder the components is to start with the shor
0521 cd 18 00 call write_string 0524 cd fe 00 call address_entry 0527 cd 89 02 call write_newline 052a e5 push hl 052b 21 12 03 ld hl,length_entry_str
0580 cd 89 02 call write_newline 0583 e5 push hl 0584 21 62 03 ld hl,LBA_entry_string 0587 cd 18 00 call write_string 058a cd 29 01 call decimal_entry
05dc ; 05dc .. 00 monitor_message: defm "\r\nROM ver. 8\r\n",0 05eb .. 00 no_match_message: defm "? ",0 05ee .. 00 help_message:
Customized BIOS# File z80_cbios.asm 0000 ; skeletal cbios for first level of CP/M 2.0 alteration0000 ; Modified for CPUville Z80 computer with IDE dis
fa33 ; ibm-compatible 8" disks fa33 ; no translations fa33 ; fa33 ; disk Parameter header for disk 00 fa33 00 00 00 00 dpbase: defw 0000h, 0000h
fa96 c0 defm 192 ;alloc 0 fa97 00 defm 0 ;alloc 1 fa98 00 00 defw 0 ;check size fa9a 02 00 defw 2 ;track offset fa9c ; fa9c ; end of fixed tables fa9c
face ; face ; no error, move to next sector face e1 pop HL ;recall dma address facf 11 80 00 LD DE, 128 ;dma=dma+128 fad2 19 ADD HL,DE ;new dma addres
fb03 ; fb03 01 80 00 LD BC, 80h ;default dma address is 80h fb06 cd 77 fb call setdma fb09 ; fb09 fb ei ;enable the interrupt system fb0a 3a 04 00 LD
fb3b c9 ret fb3c ; fb3c list: ;list character from register c fb3c 79 LD a, c ;character to register a fb3d c9 ret ;null subroutine fb3e ; fb3e
fb57 3a 35 fc LD A,(diskno) fb5a 6f LD l, a ;l=disk number 0, 1, 2, 3 fb5b 26 00 LD h, 0 ;high order zero fb5d 29 ADD HL,HL ;*2 fb5e 29 ADD HL,HL ;*
The ICs can be soldered directly to the board without fear of damage if you use a 15-watt or smaller soldering iron.3. The resistor network can be sol
fb7d ;Return a 00h in register a if the operation completes properly, and 0lh if an error occurs during the read. fb7d ;Disk number in 'diskno&ap
disk fbc7 11 72 fd ld de,hstbuf ;host buffer fbca 06 80 ld b,128 ;size of CP/M sector fbcc 1a rd_sector_loop: ld a,(de) ;get byte from host buffer fbc
fc02 d3 0c out (0ch),a ;lba bits 8 - 15 = "track" fc04 3a 35 fc ld a,(diskno) fc07 d3 0d out (0dh),a ;lba bits 16 to 20 used for "disk&
fd32 00... chk00: defs 16 ;check vector 0 fd42 00... chk01: defs 16 ;check vector 1 fd52 00... chk02: defs 16 ;check vector 2 fd62 00... chk03: defs
0823 3a 65 08 sector_loop: ld a,(sector) 0826 4f ld c,a ;CP/M sector 0827 cd 21 fa call setsec 082a ed 4b 67 08 ld bc,(address) ;memory location 082e
Putsys# File putsys.asm 0000 ;Copies the memory image of CP/M loaded at E400h onto tracks 0 and 1 of the first CP/M disk 0000 ;Load and run from ROM m
083f ;Write track 1, sectors 1 to 25 083f 0e 01 wr_trk_1: ld c,1 0841 cd 1e fa call settrk 0844 2a 81 08 ld hl,(address) 0847 11 80 00 ld de,128 084a
0000 ;This program is loaded into LBA sector 0 of disk, read to loc. 0800h by ROM and executed. 0000 hstbuf: equ 0900h ;will put 256-byte raw sector
0855 19 add hl,de 0856 22 86 08 ld (dmaad),hl 0859 c3 40 08 jp rd_trk_1_loop 085c d3 01 done: out (1),a ;switch memory config to all-RAM 085e c3 00 f
# End of file cpm_loader.asm 088879
6. The capacitor is next. It does not have to be oriented.7. Before you solder the 40-pin disk drive connector, take a moment to think about how you w
Table of Tested Disk DrivesDrive Year of manufacture Size Passed diskrd/diskwr test CP/M installed successfullyMechanical Hard Disk DrivesSeagate ST32
preserve disk contents)Fujitsu MPE3102AT 1999 10.2 Gb Yes YesSeagate Barracuda ATA V Model ST380023A2003 80 Gb Yes YesMaxtor DiamondMax Plus 82003 40
If you have a drive with a non-keyed connector, or one that can use the +5V supplied through pin 20, you should leave it in. If you remove pin 20 with
Commentaires sur ces manuels