From fdcfcd447dd44000f623665b24492ef81760fb15 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 2 Jul 2010 09:59:45 +0000 Subject: [PATCH] Initial import of the original source from Sprite_tm: http://spritesmods.com/avrcpm/avrcpm-0.1.tgz More information at http://spritesmods.com/?art=avrcpm git-svn-id: svn://cu.loc/avr-cpm/trunk@1 57430480-672e-4586-8877-bcf8adbbf3b7 --- avrcpm/avr/z80.asm | 2556 ++++++++++++++++++++++++++++++++++ avrcpm/avr/z80.hex | 205 +++ avrcpm/diskimage | Bin 0 -> 168448 bytes avrcpm/license.txt | 674 +++++++++ avrcpm/readme.txt | 13 + avrcpm/z80/CPM.SYS | Bin 0 -> 7680 bytes avrcpm/z80/Makefile | 34 + avrcpm/z80/bios.asm | 211 +++ avrcpm/z80/cpmdsk/ASM.COM | Bin 0 -> 8192 bytes avrcpm/z80/cpmdsk/DDT.COM | Bin 0 -> 4864 bytes avrcpm/z80/cpmdsk/DUMP.COM | Bin 0 -> 512 bytes avrcpm/z80/cpmdsk/ED.COM | Bin 0 -> 6656 bytes avrcpm/z80/cpmdsk/LOAD.COM | Bin 0 -> 1792 bytes avrcpm/z80/cpmdsk/MBASIC.COM | 1 + avrcpm/z80/cpmdsk/PIP.COM | Bin 0 -> 7424 bytes avrcpm/z80/cpmdsk/STAT.COM | Bin 0 -> 5248 bytes avrcpm/z80/cpmdsk/SUBMIT.COM | Bin 0 -> 1280 bytes avrcpm/z80/cpmdsk/XSUB.COM | Bin 0 -> 768 bytes avrcpm/z80/cpmdsk/ZORK1.COM | Bin 0 -> 8704 bytes avrcpm/z80/cpmdsk/ZORK1.DAT | Bin 0 -> 84992 bytes avrcpm/z80/ipl.asm | 74 + avrcpm/z80/readme.txt | 20 + 22 files changed, 3788 insertions(+) create mode 100755 avrcpm/avr/z80.asm create mode 100644 avrcpm/avr/z80.hex create mode 100644 avrcpm/diskimage create mode 100644 avrcpm/license.txt create mode 100644 avrcpm/readme.txt create mode 100644 avrcpm/z80/CPM.SYS create mode 100644 avrcpm/z80/Makefile create mode 100644 avrcpm/z80/bios.asm create mode 100644 avrcpm/z80/cpmdsk/ASM.COM create mode 100644 avrcpm/z80/cpmdsk/DDT.COM create mode 100644 avrcpm/z80/cpmdsk/DUMP.COM create mode 100644 avrcpm/z80/cpmdsk/ED.COM create mode 100644 avrcpm/z80/cpmdsk/LOAD.COM create mode 100644 avrcpm/z80/cpmdsk/MBASIC.COM create mode 100644 avrcpm/z80/cpmdsk/PIP.COM create mode 100644 avrcpm/z80/cpmdsk/STAT.COM create mode 100644 avrcpm/z80/cpmdsk/SUBMIT.COM create mode 100644 avrcpm/z80/cpmdsk/XSUB.COM create mode 100644 avrcpm/z80/cpmdsk/ZORK1.COM create mode 100644 avrcpm/z80/cpmdsk/ZORK1.DAT create mode 100644 avrcpm/z80/ipl.asm create mode 100644 avrcpm/z80/readme.txt diff --git a/avrcpm/avr/z80.asm b/avrcpm/avr/z80.asm new file mode 100755 index 0000000..f138f92 --- /dev/null +++ b/avrcpm/avr/z80.asm @@ -0,0 +1,2556 @@ +; Z80 emulator with CP/M support. The Z80-specific instructions themselves actually aren't +; implemented yet, making this more of an i8080 emulator. +; +; Copyright (C) 2010 Sprite_tm +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . + + +;FUSE_H=0xDF +;FUSE_L=0xF7 +.include "m88def.inc" +;device ATmega88 + +.equ MMC_DEBUG = 0 +.equ INS_DEBUG = 0 +.equ MEMTEST = 0 +.equ BOOTWAIT = 0 +.equ PORT_DEBUG = 0 +.equ DISK_DEBUG = 0 +.equ MEMFILL_CB = 1 +.equ STACK_DBG = 0 +.equ PRINT_PC = 0 + +;Port declarations + +; Port D +.equ rxd = 0 +.equ txd = 1 +.equ ram_oe = 2 +.equ ram_a8 = 3 +.equ mmc_cs = 4 +.equ ram_a5 = 5 +.equ ram_a6 = 6 +.equ ram_a7 = 7 + +;Port B +.equ ram_a4 = 0 +.equ ram_a3 = 1 +.equ ram_a2 = 2 +.equ ram_a1 = 3 +.equ mmc_mosi= 3 +.equ ram_a0 = 4 +.equ mmc_miso= 4 +.equ ram_ras= 5 +.equ mmc_sck= 5 + +;Port C +.equ ram_d1 = 0 +.equ ram_w = 1 +.equ ram_d2 = 2 +.equ ram_d4 = 3 +.equ ram_d3 = 4 +.equ ram_cas= 5 + + +;Flag bits in z_flags +.equ ZFL_S = 7 +.equ ZFL_Z = 6 +.equ ZFL_H = 4 +.equ ZFL_P = 2 +.equ ZFL_N = 1 +.equ ZFL_C = 0 + +;Register definitions +.def z_a = r2 +.def z_b = r3 +.def z_c = r4 +.def z_d = r5 +.def z_e = r6 +.def z_l = r7 +.def z_h = r8 +.def z_spl = r9 +.def z_sph = r10 + +.def dsk_trk= r11 +.def dsk_sec= r12 +.def dsk_dmah= r13 +.def dsk_dmal= r14 + +.def parityb= r15 + +.def temp = R16 ;The temp register +.def temp2 = R17 ;Second temp register +.def trace = r18 +.def opl = r19 +.def oph = r20 +.def adrl = r21 +.def adrh = r22 +.def insdecl= r23 +.def z_pcl = r24 +.def z_pch = r25 +.def insdech= r26 +.def z_flags= r27 + + +;SRAM +;Sector buffer for 512 byte reads/writes from/to SD-card +.equ sectbuff = 0x200 + +.org 0 + rjmp start ; reset vector + nop ; ext int 0 + nop ; ext int 1 + nop ; pcint0 + nop ; pcint1 + nop ; pcint2 + nop ; wdt + rjmp refrint ; tim2cmpa + nop ; tim2cmpb + nop ; tim2ovf + +start: + ldi temp,low(RAMEND) ; top of memory + out SPL,temp ; init stack pointer + ldi temp,high(RAMEND) ; top of memory + out SPH,temp ; init stack pointer + +; - Kill wdt + wdr + ldi temp,0 + out MCUSR,temp + ldi temp,0x18 + sts WDTCSR,temp + ldi temp,0x10 + sts WDTCSR,temp + + +; - Setup Ports + ldi temp,$3F + out DDRB,temp + ldi temp,$FE + out DDRD,temp + ldi temp,$22 + out DDRC,temp + + sbi portc,ram_w + sbi portc,ram_cas + sbi portb,ram_ras + sbi portd,ram_oe + sbi portd,mmc_cs + + +; - Init serial port + ldi temp,$18 + sts ucsr0b,temp + ldi temp,$6 + sts ucsr0c,temp + ldi temp,32 + sts ubrr0l,temp + ldi temp,0 + sts ubrr0h,temp + +;Init timer2. Refresh-call should happen every (8ms/512)=312 cycles. + ldi temp,2 + sts tccr2a,temp + ldi temp,2 ;clk/8 + sts tccr2b,temp + ldi temp,39 ;=312 cycles + sts ocr2a,temp + ldi temp,2 + sts timsk2,temp + sei + +.if BOOTWAIT + push temp + ldi temp,0 +bootwait1: + push temp + ldi temp,0 +bootwait2: + dec temp + brne bootwait2 + pop temp + dec temp + brne bootwait1 + +.endif + + rcall printstr + .db "CPM on an AVR, v1.0",13,0 + + + rcall printstr + .db "Initing mmc...",13,0 + rcall mmcInit + + +.if MEMTEST + rcall printstr + .db "Testing RAM...",13,0 + +;Fill RAM + ldi adrl,0 + ldi adrh,0 +ramtestw: + mov temp,adrh + eor temp,adrl + rcall memwritebyte + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + brcc ramtestw + +;re-read RAM + ldi adrl,0 + ldi adrh,0 +ramtestr: + rcall memreadbyte + mov temp2,adrh + eor temp2,adrl + cp temp,temp2 + breq ramtestrok + rcall printhex + ldi temp,'<' + rcall uartPutc + mov temp,adrh + eor temp,adrl + rcall printhex + ldi temp,'@' + rcall uartPutc + mov temp,adrh + rcall printhex + mov temp,adrl + rcall printhex + ldi temp,13 + rcall uartPutc +ramtestrok: + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + brcc ramtestr + +.endif + +.if MEMFILL_CB + ;Fill ram with cbs, which (for now) will trigger an invalid opcode error. + ldi adrl,0 + ldi adrh,0 +ramfillw: + ldi temp,0xcb + rcall memwritebyte + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + brcc ramfillw +.endif + + + +;Load initial sector from MMC (512 bytes) + ldi adrh,0 + ldi adrl,0 + rcall mmcReadSect + +;Save to Z80 RAM (only 128 bytes because that's retro) + ldi zl,low(sectbuff) + ldi zh,high(sectbuff) + ldi adrh,0x20 + ldi adrl,0x00 +iplwriteloop: + ld temp,z+ + push zh + push zl + rcall memWriteByte + pop zl + pop zh + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + cpi zl,low(sectbuff+128) + brne iplwriteloop + cpi zh,high(sectbuff+128) + brne iplwriteloop + + + +;Init z80 + ldi temp,0x00 + mov z_pcl,temp + ldi temp,0x20 + mov z_pch,temp + + ldi trace,0 + rcall printstr + .db 13,"Ok, CPU is live!",13,0 + +main: + ldi trace,0 + cpi z_pch,1 + brlo notraceon + cpi z_pch,$dc + brsh notraceon + ldi trace,1 +notraceon: + + +.if PRINT_PC + cpi z_pch,1 + brlo noprintpc + cpi z_pch,0xdc + brsh noprintpc + + rcall printstr + .db "PC=",0 + mov temp,z_pch + rcall printhex + mov temp,z_pcl + rcall printhex + ldi temp,10 + rcall uartputc +noprintpc: +.endif + + ; *** Stage 1: Fetch next opcode + mov adrl,z_pcl + mov adrh,z_pch + rcall memReadByte + adiw z_pcl,1 + + +.if INS_DEBUG + cpi trace,0 + breq notrace1 + rcall printstr + .db "PC=",0 + push temp + mov temp,adrh + rcall printhex + mov temp,adrl + rcall printhex + pop temp + rcall printstr + .db ", opcode=",0 + rcall printhex +notrace1: +.endif + + ; *** Stage 2: Decode it using the ins_table. + ldi temp2,0 + ldi zl,low(inst_table*2) + ldi zh,high(inst_table*2) + add zl,temp + adc zh,temp2 + add zl,temp + adc zh,temp2 + lpm insdecl,Z+ + lpm insdech,Z + +.if INS_DEBUG + cpi trace,0 + breq notrace2 + rcall printstr + .db ", decoded=",0 + mov temp,insdech + rcall printhex + mov temp,insdecl + rcall printhex + rcall printstr + .db ".",13,0 +notrace2: +.endif + + ; *** Stage 3: Fetch operand. Use the fetch jumptable for this. + mov temp,insdecl + andi temp,0x1F + cpi temp,0 + breq nofetch + ldi temp2,0 + lsl temp + ldi zl,low(fetchjumps*2) + ldi zh,high(fetchjumps*2) + add zl,temp + adc zh,temp2 + + lpm temp,Z+ + lpm temp2,Z + mov zl,temp + mov zh,temp2 + icall + +.if INS_DEBUG + cpi trace,0 + breq notrace3 + rcall printstr + .db "pre: oph:l=",0 + mov temp,oph + rcall printhex + mov temp,opl + rcall printhex + rcall printstr + .db " -- ",0 +notrace3: +.endif + +nofetch: + ; *** Stage 4: Execute operation :) Use the op jumptable for this. + mov temp,insdech + andi temp,0xFC + lsr temp + cpi temp,0 + breq nooper + ldi zl,low(opjumps*2) + ldi zh,high(opjumps*2) + ldi temp2,0 + add zl,temp + adc zh,temp2 + lpm temp,Z+ + lpm temp2,Z + mov zl,temp + mov zh,temp2 + icall + +.if INS_DEBUG + cpi trace,0 + breq notrace4 + rcall printstr + .db ",post:oph:l=",0 + mov temp,oph + rcall printhex + mov temp,opl + rcall printhex +notrace4: +.endif + +nooper: + ; *** Stage 5: Store operand. Use the store jumptable for this. + swap insdecl + swap insdech + mov temp,insdecl + andi temp,0x0E + andi insdech,0x30 + or temp,insdech + cpi temp,0 + breq nostore + ldi zl,low(storejumps*2) + ldi zh,high(storejumps*2) + ldi temp2,0 + add zl,temp + adc zh,temp2 + lpm temp,Z+ + lpm temp2,Z + mov zl,temp + mov zh,temp2 + icall + +.if INS_DEBUG + cpi trace,0 + breq notrace5 + rcall printstr + .db ", stored.",0 +notrace5: +.endif + +nostore: + +.if INS_DEBUG + cpi trace,0 + breq notrace6 + rcall printstr + .db 13,0 +notrace6: +.endif + + ;All done. Neeeext! + rjmp main + + +; ----------------Virtual peripherial interface ------ + +;The hw is modelled to make writing a CPM BIOS easier. +;Ports: +;0 - Con status. Returns 0xFF if the UART has a byte, 0 otherwise. +;1 - Console input, aka UDR. +;2 - Console output +;16 - Track select +;18 - Sector select +;20 - Write addr l +;21 - Write addr h +;22 - Trigger - write 1 to read, 2 to write a sector using the above info. +; This will automatically move track, sector and dma addr to the next sector. + +;Called with port in temp2. Should return value in temp. +portRead: + cpi temp2,0 + breq conStatus + cpi temp2,1 + breq conInp + ret + +;Called with port in temp2 and value in temp. +portWrite: + cpi temp2,0 + breq dbgOut + cpi temp2,2 + breq conOut + cpi temp2,16 + breq dskTrackSel + cpi temp2,18 + breq dskSecSel + cpi temp2,20 + breq dskDmaL + cpi temp2,21 + breq dskDmaH + cpi temp2,22 + breq dskDoIt + ret + + +conStatus: + lds temp2,UCSR0A + ldi temp,0 + sbrc temp2,7 + ldi temp,0xff + ret + +conInp: + rcall uartGetc + ret + +dbgOut: + rcall printstr + .db "Debug: ",0 + rcall printhex + rcall printstr + .db 13,0 + ret + +conOut: + rcall uartputc + ret + +dskTrackSel: + mov dsk_trk,temp + ret + +dskSecSel: + mov dsk_sec,temp + ret + +dskDmal: + mov dsk_dmal,temp + ret + +dskDmah: + mov dsk_dmah,temp + ret + +dskDoIt: +.if DISK_DEBUG + push temp + rcall printstr + .db "Disk read: track ",0 + mov temp,dsk_trk + rcall printhex + rcall printstr + .db " sector ",0 + mov temp,dsk_sec + rcall printhex + rcall printstr + .db " dma-addr ",0 + mov temp,dsk_dmah + rcall printhex + mov temp,dsk_dmal + rcall printhex + rcall printstr + .db ".",13,0 + pop temp +.endif + + ;First, convert track/sector to an LBA address (in 128byte blocks) + push temp + mov adrl,dsk_sec + ldi adrh,0 + mov temp2,dsk_trk +dskXlateLoop: + cpi temp2,0 + breq dskXlateLoopEnd + ldi temp,26 + add adrl,temp + ldi temp,0 + adc adrh,temp + dec temp2 + rjmp dskXlateLoop +dskXlateLoopEnd: + pop temp + + ;Now, see what has to be done. + cpi temp,1 + breq dskDoItRead + cpi temp,2 + breq dskDoItWrite + +dskDoItRead: + push adrl + ;Convert from 128-byte LBA blocks to 512-byte LBA blocks + lsr adrh + ror adrl + lsr adrh + ror adrl + ;Read 512-byte sector + rcall mmcReadSect + pop adrl + + ;Now, move the correct portion of the sector from AVR ram to Z80 ram + ldi zl,low(sectbuff) + ldi zh,high(sectbuff) + ldi temp,128 + ldi temp2,0 + sbrc adrl,0 + add zl,temp + sbrc adrl,0 + adc zh,temp2 + sbrc adrl,1 + inc zh + + mov adrh,dsk_dmah + mov adrl,dsk_dmal + + ldi temp2,128 +dskDoItReadMemLoop: + push temp2 + ld temp,z+ + push zh + push zl + rcall memWriteByte + pop zl + pop zh + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + pop temp2 + dec temp2 + brne dskDoItReadMemLoop + ret + +dskDoItWrite: +;The write routines is a bit naive: it'll read the 512-byte sector the 128byte CPM-sector +;resides in into memory, will overwrite the needed 128 byte with the Z80s memory buffer +;and will then write it back to disk. In theory, this would mean that every 512 bytes +;written will take 4 write cycles, while theoretically the writes could be deferred so we +;would only have to do one write cycle. + +.if DISK_DEBUG + push temp + rcall printstr + .db "Disk write: track ",0 + mov temp,dsk_trk + rcall printhex + rcall printstr + .db " sector ",0 + mov temp,dsk_sec + rcall printhex + rcall printstr + .db " dma-addr ",0 + mov temp,dsk_dmah + rcall printhex + mov temp,dsk_dmal + rcall printhex + rcall printstr + .db ".",13,0 + pop temp +.endif + + + push adrl + push adrh + ;Convert from 128-byte LBA blocks to 512-byte LBA blocks + lsr adrh + ror adrl + lsr adrh + ror adrl + ;Read 512-byte sector + rcall mmcReadSect + pop adrh + pop adrl + + push adrl + push adrh + +;Copy the data from the Z80 DMA buffer in external memory to the right place in the +;sector buffer. + ;Now, move the correct portion of the sector from AVR ram to Z80 ram + ldi zl,low(sectbuff) + ldi zh,high(sectbuff) + ldi temp,128 + ldi temp2,0 + sbrc adrl,0 + add zl,temp + sbrc adrl,0 + adc zh,temp2 + sbrc adrl,1 + inc zh + mov adrh,dsk_dmah + mov adrl,dsk_dmal + ldi temp2,128 +dskDoItWriteMemLoop: + push temp2 + + push zh + push zl + rcall memReadByte + pop zl + pop zh + st z+,temp + ldi temp,1 + ldi temp2,0 + add adrl,temp + adc adrh,temp2 + + pop temp2 + dec temp2 + brne dskDoItWriteMemLoop + + pop adrh + pop adrl + + ;Convert from 128-byte LBA blocks to 512-byte LBA blocks + lsr adrh + ror adrl + lsr adrh + ror adrl + ;Write the sector back. + rcall mmcWriteSect + + ;All done :) + ret + +; ----------------- MMC/SD routines ------------------ + +mmcByteNoSend: + ldi temp,0xff +mmcByte: + +.if MMC_DEBUG + push zl + push zh + rcall printstr + .db "MMC: <--",0 + rcall printhex +.endif + + out SPDR,temp +mmcWrByteW: + in temp,SPSR + sbrs temp,7 + rjmp mmcWrByteW + in temp,SPDR + +.if MMC_DEBUG + push temp + rcall printstr + .db ", -->",0 + rcall printhex + rcall printstr + .db ".",13,0 + pop temp + pop zh + pop zl +.endif + ret + + +;Wait till the mmc answers with the response in temp2, or till a timeout happens. +mmcWaitResp: + ldi zl,0 + ldi zh,0 +mmcWaitResploop: + rcall mmcByteNoSend + cpi temp,0xff + brne mmcWaitResploopEnd + adiw zl,1 + cpi zh,255 + breq mmcWaitErr + rjmp mmcWaitResploop +mmcWaitResploopEnd: + ret + + +mmcWaitErr: + mov temp,temp2 + rcall printhex + rcall printstr + .db ": Error: MMC resp timeout!",13,0 + rjmp resetAVR + +mmcInit: + ldi temp,0x53 + out SPCR,temp + + ;Init start: send 80 clocks with cs disabled + sbi portd,mmc_cs + + ldi temp2,20 +mmcInitLoop: + mov temp,temp2 + rcall mmcByte + dec temp2 + brne mmcInitLoop + + cbi portd,mmc_cs + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + sbi portd,mmc_cs + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + rcall mmcByteNoSend + + ;Send init command + cbi portd,mmc_cs + ldi temp,0xff ;dummy + rcall mmcByte + ldi temp,0xff ;dummy + rcall mmcByte + ldi temp,0x40 ;cmd + rcall mmcByte + ldi temp,0 ;pxh + rcall mmcByte + ldi temp,0 ;pxl + rcall mmcByte + ldi temp,0 ;pyh + rcall mmcByte + ldi temp,0 ;pyl + rcall mmcByte + ldi temp,0x95 ;crc + rcall mmcByte + ldi temp,0xff ;return byte + rcall mmcByte + + ldi temp2,0 + rcall mmcWaitResp + + sbi portd,mmc_cs + rcall mmcByteNoSend + + +;Read OCR till card is ready + ldi temp2,150 +mmcInitOcrLoop: + push temp2 + + cbi portd,mmc_cs + ldi temp,0xff ;dummy + rcall mmcByte + ldi temp,0x41 ;cmd + rcall mmcByte + ldi temp,0 ;pxh + rcall mmcByte + ldi temp,0 ;pxl + rcall mmcByte + ldi temp,0 ;pyh + rcall mmcByte + ldi temp,0 ;pyl + rcall mmcByte + ldi temp,0x95 ;crc + rcall mmcByte + rcall mmcByteNoSend + + ldi temp2,1 + rcall mmcWaitResp + cpi temp,0 + breq mmcInitOcrLoopDone + + sbi portd,mmc_cs + rcall mmcByteNoSend + + pop temp2 + dec temp2 + cpi temp2,0 + brne mmcInitOcrLoop + + ldi temp,4 + rjmp mmcWaitErr + +mmcInitOcrLoopDone: + pop temp2 + sbi portd,mmc_cs + rcall mmcByteNoSend + + ldi temp,0 + out SPCR,temp + ret + + +;Call this with adrh:adrl = sector number +;16bit lba address means a max reach of 32M. +mmcReadSect: + ldi temp,0x50 + out SPCR,temp + + cbi portd,mmc_cs + rcall mmcByteNoSend + ldi temp,0x51 ;cmd (read sector) + rcall mmcByte + ldi temp,0 + lsl adrl + rol adrh + rol temp + rcall mmcByte + mov temp,adrh ;pxl + rcall mmcByte + mov temp,adrl ;pyh + rcall mmcByte + ldi temp,0 ;pyl + rcall mmcByte + ldi temp,0x95 ;crc + rcall mmcByte + ldi temp,0xff ;return byte + rcall mmcByte + + ;resp + ldi temp2,2 + rcall mmcWaitResp + + ;data token + ldi temp2,3 + rcall mmcWaitResp + + ;Read sector to AVR RAM + ldi zl,low(sectbuff) + ldi zh,high(sectbuff) +mmcreadloop: + rcall mmcByteNoSend + st z+,temp + cpi zl,low(sectbuff+512) + brne mmcreadloop + cpi zh,high(sectbuff+512) + brne mmcreadloop + + ;CRC + rcall mmcByteNoSend + rcall mmcByteNoSend + + sbi portd,mmc_cs + rcall mmcByteNoSend + + ldi temp,0 + out SPCR,temp + ret + + +;Call this with adrh:adrl = sector number +;16bit lba address means a max reach of 32M. +mmcWriteSect: + ldi temp,0x50 + out SPCR,temp + + cbi portd,mmc_cs + rcall mmcByteNoSend + + ldi temp,0x58 ;cmd (write sector) + rcall mmcByte + ldi temp,0 + lsl adrl + rol adrh + rol temp + rcall mmcByte + mov temp,adrh ;pxl + rcall mmcByte + mov temp,adrl ;pyh + rcall mmcByte + ldi temp,0 ;pyl + rcall mmcByte + ldi temp,0x95 ;crc + rcall mmcByte + ldi temp,0xff ;return byte + rcall mmcByte + + ;resp + ldi temp2,1 + rcall mmcWaitResp + + ;Send data token + ldi temp,0xfe + rcall mmcByte + + ;Write sector from AVR RAM + ldi zl,low(sectbuff) + ldi zh,high(sectbuff) +mmcwriteloop: + ld temp,z+ + rcall mmcByte + cpi zl,low(sectbuff+512) + brne mmcwriteloop + cpi zh,high(sectbuff+512) + brne mmcwriteloop + + ;CRC + rcall mmcByteNoSend + rcall mmcByteNoSend + + ;Status. Ignored for now. + rcall mmcByteNoSend + +;Wait till the mmc has written everything +mmcwaitwritten: + rcall mmcByteNoSend + cpi temp,0xff + brne mmcwaitwritten + + sbi portd,mmc_cs + rcall mmcByteNoSend + + ldi temp,0 + out SPCR,temp + ret + + +;Set up wdt to time out after 1 sec. +resetAVR: + cli + ldi temp,0x10 + sts WDTCSR,temp + ldi temp,0x1f + sts WDTCSR,temp +resetwait: + rjmp resetwait + +; ------------------ DRAM routines ------------- + +;Sends the address in zh:zl to the ram +dram_setaddr: + push temp + in temp,portd + andi temp,0x17 + out portd,temp + in temp,portb + andi temp,0xE0 + out portb,temp + sbrc zl,0 + sbi portb,ram_a0 + sbrc zl,1 + sbi portb,ram_a1 + sbrc zl,2 + sbi portb,ram_a2 + sbrc zl,3 + sbi portb,ram_a3 + sbrc zl,4 + sbi portb,ram_a4 + sbrc zl,5 + sbi portd,ram_a5 + sbrc zl,6 + sbi portd,ram_a6 + sbrc zl,7 + sbi portd,ram_a7 + sbrc zh,0 + sbi portd,ram_a8 + pop temp + ret + +dram_getnibble: + andi temp,0xf0 + sbic pinc,ram_d1 + ori temp,0x1 + sbic pinc,ram_d2 + ori temp,0x2 + sbic pinc,ram_d3 + ori temp,0x4 + sbic pinc,ram_d4 + ori temp,0x8 + ret + +dram_sendnibble: + push temp2 + in temp2,portc + andi temp2,0xE2 + + sbrc temp,0 + ori temp2,(1< Z80 periph stuff ------------------ + +.equ memReadByte = dram_read +.equ memWriteByte = dram_write + + + +;Fetches a char from the uart to temp. If none available, waits till one is. +uartgetc: + lds temp,ucsr0a + sbrs temp,7 + rjmp uartgetc + lds temp,udr0 + ret + +;Sends a char from temp to the uart. +uartputc: + push temp +uartputc_l: + lds temp,ucsr0a + sbrs temp,5 + rjmp uartputc_l + pop temp + sts udr0,temp + ret + +; ------------ Fetch phase stuff ----------------- + +.equ FETCH_NOP = (0<<0) +.equ FETCH_A = (1<<0) +.equ FETCH_B = (2<<0) +.equ FETCH_C = (3<<0) +.equ FETCH_D = (4<<0) +.equ FETCH_E = (5<<0) +.equ FETCH_H = (6<<0) +.equ FETCH_L = (7<<0) +.equ FETCH_AF = (8<<0) +.equ FETCH_BC = (9<<0) +.equ FETCH_DE = (10<<0) +.equ FETCH_HL = (11<<0) +.equ FETCH_SP = (12<<0) +.equ FETCH_MBC = (13<<0) +.equ FETCH_MDE = (14<<0) +.equ FETCH_MHL = (15<<0) +.equ FETCH_MSP = (16<<0) +.equ FETCH_DIR8 = (17<<0) +.equ FETCH_DIR16= (18<<0) +.equ FETCH_RST = (19<<0) + + +;Jump table for fetch routines. Make sure to keep this in sync with the .equs! +fetchjumps: +.dw do_fetch_nop +.dw do_fetch_a +.dw do_fetch_b +.dw do_fetch_c +.dw do_fetch_d +.dw do_fetch_e +.dw do_fetch_h +.dw do_fetch_l +.dw do_fetch_af +.dw do_fetch_bc +.dw do_fetch_de +.dw do_fetch_hl +.dw do_fetch_sp +.dw do_fetch_mbc +.dw do_fetch_mde +.dw do_fetch_mhl +.dw do_fetch_msp +.dw do_fetch_dir8 +.dw do_fetch_dir16 +.dw do_fetch_rst + +do_fetch_nop: + ret + +do_fetch_a: + mov opl,z_a + ret + +do_fetch_b: + mov opl,z_b + ret + +do_fetch_c: + mov opl,z_c + ret + +do_fetch_d: + mov opl,z_d + ret + +do_fetch_e: + mov opl,z_e + ret + +do_fetch_h: + mov opl,z_h + ret + +do_fetch_l: + mov opl,z_l + ret + +do_fetch_af: + mov opl,z_flags + mov oph,z_a + rcall do_op_calcparity + andi opl,~(1< todo + rcall do_op_inv + mov temp,opl + ret + + +do_op_scf: + ori z_flags,(1< (",0 + mov temp,opl + rcall printhex + rcall printstr + .db ")",13,0 +.endif + mov temp,z_a + mov temp2,opl + rcall portWrite + ret + +do_op_in: ; in a,(opl) +.if PORT_DEBUG + rcall printstr + .db 13,"Port read: (",0 + mov temp,opl + rcall printhex + rcall printstr + .db ") -> ",0 +.endif + + mov temp2,opl + rcall portRead + mov opl,temp + +.if PORT_DEBUG + rcall printhex + rcall printstr + .db 13,0 +.endif + ret + +do_op_calcparity: + ldi temp2,1 + sbrc parityb,0 + inc temp2 + sbrc parityb,1 + inc temp2 + sbrc parityb,2 + inc temp2 + sbrc parityb,3 + inc temp2 + sbrc parityb,4 + inc temp2 + sbrc parityb,5 + inc temp2 + sbrc parityb,6 + inc temp2 + sbrc parityb,7 + inc temp2 + andi temp2,1 + ret + +do_op_inv: + rcall printstr + .db "Invalid opcode @ PC=",0 + mov temp,z_pch + rcall printhex + mov temp,z_pcl + rcall printhex +haltinv: + rjmp haltinv + + +; ----------------------- Opcode decoding ------------------------- + +; Lookup table for Z80 opcodes. Translates the first byte of the instruction word into three +; operations: fetch, do something, store. +; The table is made of 256 words. These 16-bit words consist of +; the fetch operation (bit 0-4), the processing operation (bit 10-16) and the store +; operation (bit 5-9). + +inst_table: +.dw (FETCH_NOP | OP_NOP | STORE_NOP) ; 00 NOP +.dw (FETCH_DIR16| OP_NOP | STORE_BC ) ; 01 nn nn LD BC,nn +.dw (FETCH_A | OP_NOP | STORE_MBC ) ; 02 LD (BC),A +.dw (FETCH_BC | OP_INC16 | STORE_BC ) ; 03 INC BC +.dw (FETCH_B | OP_INC | STORE_B ) ; 04 INC B +.dw (FETCH_B | OP_DEC | STORE_B ) ; 05 DEC B +.dw (FETCH_DIR8 | OP_NOP | STORE_B ) ; 06 nn LD B,n +.dw (FETCH_A | OP_RLC | STORE_A ) ; 07 RLCA +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 08 EX AF,AF' (Z80) +.dw (FETCH_BC | OP_ADDHL | STORE_HL ) ; 09 ADD HL,BC +.dw (FETCH_MBC | OP_NOP | STORE_A ) ; 0A LD A,(BC) +.dw (FETCH_BC | OP_DEC16 | STORE_BC ) ; 0B DEC BC +.dw (FETCH_C | OP_INC | STORE_C ) ; 0C INC C +.dw (FETCH_C | OP_DEC | STORE_C ) ; 0D DEC C +.dw (FETCH_DIR8 | OP_NOP | STORE_C ) ; 0E nn LD C,n +.dw (FETCH_A | OP_RRC | STORE_A ) ; 0F RRCA +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 10 oo DJNZ o (Z80) +.dw (FETCH_DIR16| OP_NOP | STORE_DE ) ; 11 nn nn LD DE,nn +.dw (FETCH_A | OP_NOP | STORE_MDE) ; 12 LD (DE),A +.dw (FETCH_DE | OP_INC16 | STORE_DE ) ; 13 INC DE +.dw (FETCH_D | OP_INC | STORE_D ) ; 14 INC D +.dw (FETCH_D | OP_DEC | STORE_D ) ; 15 DEC D +.dw (FETCH_DIR8 | OP_NOP | STORE_D ) ; 16 nn LD D,n +.dw (FETCH_A | OP_RL | STORE_A ) ; 17 RLA +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 18 oo JR o (Z80) +.dw (FETCH_DE | OP_ADDHL | STORE_HL ) ; 19 ADD HL,DE +.dw (FETCH_MDE | OP_NOP | STORE_A ) ; 1A LD A,(DE) +.dw (FETCH_DE | OP_DEC16 | STORE_DE ) ; 1B DEC DE +.dw (FETCH_E | OP_INC | STORE_E ) ; 1C INC E +.dw (FETCH_E | OP_DEC | STORE_E ) ; 1D DEC E +.dw (FETCH_DIR8 | OP_NOP | STORE_E ) ; 1E nn LD E,n +.dw (FETCH_A | OP_RR | STORE_A ) ; 1F RRA +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 20 oo JR NZ,o (Z80) +.dw (FETCH_DIR16| OP_NOP | STORE_HL ) ; 21 nn nn LD HL,nn +.dw (FETCH_DIR16| OP_STHL | STORE_NOP) ; 22 nn nn LD (nn),HL +.dw (FETCH_HL | OP_INC16 | STORE_HL ) ; 23 INC HL +.dw (FETCH_H | OP_INC | STORE_H ) ; 24 INC H +.dw (FETCH_H | OP_DEC | STORE_H ) ; 25 DEC H +.dw (FETCH_DIR8 | OP_NOP | STORE_H ) ; 26 nn LD H,n +.dw (FETCH_A | OP_DA | STORE_A ) ; 27 DAA +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 28 oo JR Z,o (Z80) +.dw (FETCH_HL | OP_ADDHL | STORE_HL ) ; 29 ADD HL,HL +.dw (FETCH_DIR16| OP_RMEM16 | STORE_HL ) ; 2A nn nn LD HL,(nn) +.dw (FETCH_HL | OP_DEC16 | STORE_HL ) ; 2B DEC HL +.dw (FETCH_L | OP_INC | STORE_L ) ; 2C INC L +.dw (FETCH_L | OP_DEC | STORE_L ) ; 2D DEC L +.dw (FETCH_DIR8 | OP_NOP | STORE_L ) ; 2E nn LD L,n +.dw (FETCH_A | OP_CPL | STORE_A ) ; 2F CPL +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 30 oo JR NC,o (Z80) +.dw (FETCH_DIR16| OP_NOP | STORE_SP ) ; 31 nn nn LD SP,nn +.dw (FETCH_DIR16| OP_NOP | STORE_AM ) ; 32 nn nn LD (nn),A +.dw (FETCH_SP | OP_INC16 | STORE_SP ) ; 33 INC SP +.dw (FETCH_MHL | OP_INC | STORE_MHL) ; 34 INC (HL) +.dw (FETCH_MHL | OP_DEC | STORE_MHL) ; 35 DEC (HL) +.dw (FETCH_DIR8 | OP_NOP | STORE_MHL) ; 36 nn LD (HL),n +.dw (FETCH_NOP | OP_SCF | STORE_NOP) ; 37 SCF +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 38 oo JR C,o (Z80) +.dw (FETCH_SP | OP_ADDHL | STORE_HL ) ; 39 ADD HL,SP +.dw (FETCH_DIR16| OP_RMEM8 | STORE_A ) ; 3A nn nn LD A,(nn) +.dw (FETCH_SP | OP_DEC16 | STORE_SP ) ; 3B DEC SP +.dw (FETCH_A | OP_INC | STORE_A ) ; 3C INC A +.dw (FETCH_A | OP_DEC | STORE_A ) ; 3D DEC A +.dw (FETCH_DIR8 | OP_NOP | STORE_A ) ; 3E nn LD A,n +.dw (FETCH_NOP | OP_CCF | STORE_NOP) ; 3F CCF (Complement Carry Flag, gvd) +.dw (FETCH_B | OP_NOP | STORE_B ) ; 40 LD B,r +.dw (FETCH_C | OP_NOP | STORE_B ) ; 41 LD B,r +.dw (FETCH_D | OP_NOP | STORE_B ) ; 42 LD B,r +.dw (FETCH_E | OP_NOP | STORE_B ) ; 43 LD B,r +.dw (FETCH_H | OP_NOP | STORE_B ) ; 44 LD B,r +.dw (FETCH_L | OP_NOP | STORE_B ) ; 45 LD B,r +.dw (FETCH_MHL | OP_NOP | STORE_B ) ; 46 LD B,r +.dw (FETCH_A | OP_NOP | STORE_B ) ; 47 LD B,r +.dw (FETCH_B | OP_NOP | STORE_C ) ; 48 LD C,r +.dw (FETCH_C | OP_NOP | STORE_C ) ; 49 LD C,r +.dw (FETCH_D | OP_NOP | STORE_C ) ; 4A LD C,r +.dw (FETCH_E | OP_NOP | STORE_C ) ; 4B LD C,r +.dw (FETCH_H | OP_NOP | STORE_C ) ; 4C LD C,r +.dw (FETCH_L | OP_NOP | STORE_C ) ; 4D LD C,r +.dw (FETCH_MHL | OP_NOP | STORE_C ) ; 4E LD C,r +.dw (FETCH_A | OP_NOP | STORE_C ) ; 4F LD C,r +.dw (FETCH_B | OP_NOP | STORE_D ) ; 50 LD D,r +.dw (FETCH_C | OP_NOP | STORE_D ) ; 51 LD D,r +.dw (FETCH_D | OP_NOP | STORE_D ) ; 52 LD D,r +.dw (FETCH_E | OP_NOP | STORE_D ) ; 53 LD D,r +.dw (FETCH_H | OP_NOP | STORE_D ) ; 54 LD D,r +.dw (FETCH_L | OP_NOP | STORE_D ) ; 55 LD D,r +.dw (FETCH_MHL | OP_NOP | STORE_D ) ; 56 LD D,r +.dw (FETCH_A | OP_NOP | STORE_D ) ; 57 LD D,r +.dw (FETCH_B | OP_NOP | STORE_E ) ; 58 LD E,r +.dw (FETCH_C | OP_NOP | STORE_E ) ; 59 LD E,r +.dw (FETCH_D | OP_NOP | STORE_E ) ; 5A LD E,r +.dw (FETCH_E | OP_NOP | STORE_E ) ; 5B LD E,r +.dw (FETCH_H | OP_NOP | STORE_E ) ; 5C LD E,r +.dw (FETCH_L | OP_NOP | STORE_E ) ; 5D LD E,r +.dw (FETCH_MHL | OP_NOP | STORE_E ) ; 5E LD E,r +.dw (FETCH_A | OP_NOP | STORE_E ) ; 5F LD E,r +.dw (FETCH_B | OP_NOP | STORE_H ) ; 60 LD H,r +.dw (FETCH_C | OP_NOP | STORE_H ) ; 61 LD H,r +.dw (FETCH_D | OP_NOP | STORE_H ) ; 62 LD H,r +.dw (FETCH_E | OP_NOP | STORE_H ) ; 63 LD H,r +.dw (FETCH_H | OP_NOP | STORE_H ) ; 64 LD H,r +.dw (FETCH_L | OP_NOP | STORE_H ) ; 65 LD H,r +.dw (FETCH_MHL | OP_NOP | STORE_H ) ; 66 LD H,r +.dw (FETCH_A | OP_NOP | STORE_H ) ; 67 LD H,r +.dw (FETCH_B | OP_NOP | STORE_L ) ; 68 LD L,r +.dw (FETCH_C | OP_NOP | STORE_L ) ; 69 LD L,r +.dw (FETCH_D | OP_NOP | STORE_L ) ; 6A LD L,r +.dw (FETCH_E | OP_NOP | STORE_L ) ; 6B LD L,r +.dw (FETCH_H | OP_NOP | STORE_L ) ; 6C LD L,r +.dw (FETCH_L | OP_NOP | STORE_L ) ; 6D LD L,r +.dw (FETCH_MHL | OP_NOP | STORE_L ) ; 6E LD L,r +.dw (FETCH_A | OP_NOP | STORE_L ) ; 6F LD L,r +.dw (FETCH_B | OP_NOP | STORE_MHL) ; 70 LD (HL),r +.dw (FETCH_C | OP_NOP | STORE_MHL) ; 71 LD (HL),r +.dw (FETCH_D | OP_NOP | STORE_MHL) ; 72 LD (HL),r +.dw (FETCH_E | OP_NOP | STORE_MHL) ; 73 LD (HL),r +.dw (FETCH_H | OP_NOP | STORE_MHL) ; 74 LD (HL),r +.dw (FETCH_L | OP_NOP | STORE_MHL) ; 75 LD (HL),r +.dw (FETCH_NOP | OP_NOP | STORE_NOP) ; 76 HALT +.dw (FETCH_A | OP_NOP | STORE_MHL) ; 77 LD (HL),r +.dw (FETCH_B | OP_NOP | STORE_A ) ; 78 LD A,r +.dw (FETCH_C | OP_NOP | STORE_A ) ; 79 LD A,r +.dw (FETCH_D | OP_NOP | STORE_A ) ; 7A LD A,r +.dw (FETCH_E | OP_NOP | STORE_A ) ; 7B LD A,r +.dw (FETCH_H | OP_NOP | STORE_A ) ; 7C LD A,r +.dw (FETCH_L | OP_NOP | STORE_A ) ; 7D LD A,r +.dw (FETCH_MHL | OP_NOP | STORE_A ) ; 7E LD A,r +.dw (FETCH_A | OP_NOP | STORE_A ) ; 7F LD A,r +.dw (FETCH_B | OP_ADDA | STORE_A ) ; 80 ADD A,r +.dw (FETCH_C | OP_ADDA | STORE_A ) ; 81 ADD A,r +.dw (FETCH_D | OP_ADDA | STORE_A ) ; 82 ADD A,r +.dw (FETCH_E | OP_ADDA | STORE_A ) ; 83 ADD A,r +.dw (FETCH_H | OP_ADDA | STORE_A ) ; 84 ADD A,r +.dw (FETCH_L | OP_ADDA | STORE_A ) ; 85 ADD A,r +.dw (FETCH_MHL | OP_ADDA | STORE_A ) ; 86 ADD A,r +.dw (FETCH_A | OP_ADDA | STORE_A ) ; 87 ADD A,r +.dw (FETCH_B | OP_ADCA | STORE_A ) ; 88 ADC A,r +.dw (FETCH_C | OP_ADCA | STORE_A ) ; 89 ADC A,r +.dw (FETCH_D | OP_ADCA | STORE_A ) ; 8A ADC A,r +.dw (FETCH_E | OP_ADCA | STORE_A ) ; 8B ADC A,r +.dw (FETCH_H | OP_ADCA | STORE_A ) ; 8C ADC A,r +.dw (FETCH_L | OP_ADCA | STORE_A ) ; 8D ADC A,r +.dw (FETCH_MHL | OP_ADCA | STORE_A ) ; 8E ADC A,r +.dw (FETCH_A | OP_ADCA | STORE_A ) ; 8F ADC A,r +.dw (FETCH_B | OP_SUBFA | STORE_A ) ; 90 SUB A,r +.dw (FETCH_C | OP_SUBFA | STORE_A ) ; 91 SUB A,r +.dw (FETCH_D | OP_SUBFA | STORE_A ) ; 92 SUB A,r +.dw (FETCH_E | OP_SUBFA | STORE_A ) ; 93 SUB A,r +.dw (FETCH_H | OP_SUBFA | STORE_A ) ; 94 SUB A,r +.dw (FETCH_L | OP_SUBFA | STORE_A ) ; 95 SUB A,r +.dw (FETCH_MHL | OP_SUBFA | STORE_A ) ; 96 SUB A,r +.dw (FETCH_A | OP_SUBFA | STORE_A ) ; 97 SUB A,r +.dw (FETCH_B | OP_SBCFA | STORE_A ) ; 98 SBC A,r +.dw (FETCH_C | OP_SBCFA | STORE_A ) ; 99 SBC A,r +.dw (FETCH_D | OP_SBCFA | STORE_A ) ; 9A SBC A,r +.dw (FETCH_E | OP_SBCFA | STORE_A ) ; 9B SBC A,r +.dw (FETCH_H | OP_SBCFA | STORE_A ) ; 9C SBC A,r +.dw (FETCH_L | OP_SBCFA | STORE_A ) ; 9D SBC A,r +.dw (FETCH_MHL | OP_SBCFA | STORE_A ) ; 9E SBC A,r +.dw (FETCH_A | OP_SBCFA | STORE_A ) ; 9F SBC A,r +.dw (FETCH_B | OP_ANDA | STORE_A ) ; A0 AND A,r +.dw (FETCH_C | OP_ANDA | STORE_A ) ; A1 AND A,r +.dw (FETCH_D | OP_ANDA | STORE_A ) ; A2 AND A,r +.dw (FETCH_E | OP_ANDA | STORE_A ) ; A3 AND A,r +.dw (FETCH_H | OP_ANDA | STORE_A ) ; A4 AND A,r +.dw (FETCH_L | OP_ANDA | STORE_A ) ; A5 AND A,r +.dw (FETCH_MHL | OP_ANDA | STORE_A ) ; A6 AND A,r +.dw (FETCH_A | OP_ANDA | STORE_A ) ; A7 AND A,r +.dw (FETCH_B | OP_XORA | STORE_A ) ; A8 XOR A,r +.dw (FETCH_C | OP_XORA | STORE_A ) ; A9 XOR A,r +.dw (FETCH_D | OP_XORA | STORE_A ) ; AA XOR A,r +.dw (FETCH_E | OP_XORA | STORE_A ) ; AB XOR A,r +.dw (FETCH_H | OP_XORA | STORE_A ) ; AC XOR A,r +.dw (FETCH_L | OP_XORA | STORE_A ) ; AD XOR A,r +.dw (FETCH_MHL | OP_XORA | STORE_A ) ; AE XOR A,r +.dw (FETCH_A | OP_XORA | STORE_A ) ; AF XOR A,r +.dw (FETCH_B | OP_ORA | STORE_A ) ; B0 OR A,r +.dw (FETCH_C | OP_ORA | STORE_A ) ; B1 OR A,r +.dw (FETCH_D | OP_ORA | STORE_A ) ; B2 OR A,r +.dw (FETCH_E | OP_ORA | STORE_A ) ; B3 OR A,r +.dw (FETCH_H | OP_ORA | STORE_A ) ; B4 OR A,r +.dw (FETCH_L | OP_ORA | STORE_A ) ; B5 OR A,r +.dw (FETCH_MHL | OP_ORA | STORE_A ) ; B6 OR A,r +.dw (FETCH_A | OP_ORA | STORE_A ) ; B7 OR A,r +.dw (FETCH_B | OP_SUBFA | STORE_NOP) ; B8 CP A,r +.dw (FETCH_C | OP_SUBFA | STORE_NOP) ; B9 CP A,r +.dw (FETCH_D | OP_SUBFA | STORE_NOP) ; BA CP A,r +.dw (FETCH_E | OP_SUBFA | STORE_NOP) ; BB CP A,r +.dw (FETCH_H | OP_SUBFA | STORE_NOP) ; BC CP A,r +.dw (FETCH_L | OP_SUBFA | STORE_NOP) ; BD CP A,r +.dw (FETCH_MHL | OP_SUBFA | STORE_NOP) ; BE CP A,r +.dw (FETCH_A | OP_SUBFA | STORE_NOP) ; BF CP A,r +.dw (FETCH_NOP | OP_IFNZ | STORE_RET) ; C0 RET NZ +.dw (FETCH_NOP | OP_POP16 | STORE_BC ) ; C1 POP BC +.dw (FETCH_DIR16| OP_IFNZ | STORE_PC ) ; C2 nn nn JP NZ,nn +.dw (FETCH_DIR16| OP_NOP | STORE_PC ) ; C3 nn nn JP nn +.dw (FETCH_DIR16| OP_IFNZ | STORE_CALL) ; C4 nn nn CALL NZ,nn +.dw (FETCH_BC | OP_PUSH16 | STORE_NOP) ; C5 PUSH BC +.dw (FETCH_DIR8 | OP_ADDA | STORE_A ) ; C6 nn ADD A,n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; C7 RST 0 +.dw (FETCH_NOP | OP_IFZ | STORE_RET) ; C8 RET Z +.dw (FETCH_NOP | OP_NOP | STORE_RET) ; C9 RET +.dw (FETCH_DIR16| OP_IFZ | STORE_PC ) ; CA nn nn JP Z,nn +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; CB (Z80 specific) +.dw (FETCH_DIR16| OP_IFZ | STORE_CALL) ; CC nn nn CALL Z,nn +.dw (FETCH_DIR16| OP_NOP | STORE_CALL) ; CD nn nn CALL nn +.dw (FETCH_DIR8 | OP_ADCA | STORE_A ) ; CE nn ADC A,n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; CF RST 8H +.dw (FETCH_NOP | OP_IFNC | STORE_RET) ; D0 RET NC +.dw (FETCH_NOP | OP_POP16 | STORE_DE ) ; D1 POP DE +.dw (FETCH_DIR16| OP_IFNC | STORE_PC ) ; D2 nn nn JP NC,nn +.dw (FETCH_DIR8 | OP_OUTA | STORE_NOP) ; D3 nn OUT (n),A +.dw (FETCH_DIR16| OP_IFNC | STORE_CALL) ; D4 nn nn CALL NC,nn +.dw (FETCH_DE | OP_PUSH16 | STORE_NOP) ; D5 PUSH DE +.dw (FETCH_DIR8 | OP_SUBFA | STORE_A ) ; D6 nn SUB n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; D7 RST 10H +.dw (FETCH_NOP | OP_IFC | STORE_RET) ; D8 RET C +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; D9 EXX (Z80) +.dw (FETCH_DIR16| OP_IFC | STORE_PC ) ; DA nn nn JP C,nn +.dw (FETCH_DIR8 | OP_IN | STORE_A ) ; DB nn IN A,(n) +.dw (FETCH_DIR16| OP_IFC | STORE_CALL) ; DC nn nn CALL C,nn +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; DD (Z80) +.dw (FETCH_DIR8 | OP_SBCFA | STORE_A ) ; DE nn SBC A,n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; DF RST 18H +.dw (FETCH_NOP | OP_IFPO | STORE_RET) ; E0 RET PO +.dw (FETCH_NOP | OP_POP16 | STORE_HL ) ; E1 POP HL +.dw (FETCH_DIR16| OP_IFPO | STORE_PC ) ; E2 nn nn JP PO,nn +.dw (FETCH_MSP | OP_EXHL | STORE_MSP) ; E3 EX (SP),HL +.dw (FETCH_DIR16| OP_IFPO | STORE_CALL) ; E4 nn nn CALL PO,nn +.dw (FETCH_HL | OP_PUSH16 | STORE_NOP) ; E5 PUSH HL +.dw (FETCH_DIR8 | OP_ANDA | STORE_A ) ; E6 nn AND n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; E7 RST 20H +.dw (FETCH_NOP | OP_IFPE | STORE_RET) ; E8 RET PE +.dw (FETCH_HL | OP_NOP | STORE_PC ) ; E9 JP (HL) +.dw (FETCH_DIR16| OP_IFPE | STORE_PC ) ; EA nn nn JP PE,nn +.dw (FETCH_DE | OP_EXHL | STORE_DE ) ; EB EX DE,HL +.dw (FETCH_DIR16| OP_IFPE | STORE_CALL) ; EC nn nn CALL PE,nn +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; ED (Z80 specific) +.dw (FETCH_DIR8 | OP_XORA | STORE_A ) ; EE nn XOR n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; EF RST 28H +.dw (FETCH_NOP | OP_IFP | STORE_RET) ; F0 RET P +.dw (FETCH_NOP | OP_POP16 | STORE_AF ) ; F1 POP AF +.dw (FETCH_DIR16| OP_IFP | STORE_PC ) ; F2 nn nn JP P,nn +.dw (FETCH_NOP | OP_DI | STORE_NOP) ; F3 DI +.dw (FETCH_DIR16| OP_IFP | STORE_CALL) ; F4 nn nn CALL P,nn +.dw (FETCH_AF | OP_PUSH16 | STORE_NOP) ; F5 PUSH AF +.dw (FETCH_DIR8 | OP_ORA | STORE_A ) ; F6 nn OR n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; F7 RST 30H +.dw (FETCH_NOP | OP_IFM | STORE_RET) ; F8 RET M +.dw (FETCH_HL | OP_NOP | STORE_SP ) ; F9 LD SP,HL +.dw (FETCH_DIR16| OP_IFM | STORE_PC ) ; FA nn nn JP M,nn +.dw (FETCH_NOP | OP_EI | STORE_NOP) ; FB EI +.dw (FETCH_DIR16| OP_IFM | STORE_CALL) ; FC nn nn CALL M,nn +.dw (FETCH_NOP | OP_INV | STORE_NOP) ; FD (Z80 specific) +.dw (FETCH_DIR8 | OP_SUBFA | STORE_NOP) ; FE nn CP n +.dw (FETCH_RST | OP_NOP | STORE_CALL) ; FF RST 38H diff --git a/avrcpm/avr/z80.hex b/avrcpm/avr/z80.hex new file mode 100644 index 0000000..be78232 --- /dev/null +++ b/avrcpm/avr/z80.hex @@ -0,0 +1,205 @@ +:020000020000FC +:1000000009C0000000000000000000000000ABC2BA +:10001000000000000FEF0DBF04E00EBFA89500E048 +:1000200004BF08E10093600000E1009360000FE36B +:1000300004B90EEF0AB902E207B9419A459A2D9A1E +:100040005A9A5C9A08E10093C10006E00093C2004E +:1000500000E20093C40000E00093C50002E00093BA +:10006000B00002E00093B10007E20093B30002E0A9 +:10007000009370007894A1D243504D206F6E2061A0 +:100080006E204156522C2076312E300D000095D234 +:10009000496E6974696E67206D6D632E2E2E0D009A +:1000A00026D150E060E00BEC27D201E010E0500FC9 +:1000B000611FC8F760E050E069D1E0E0F2E060E283 +:1000C00050E00191FF93EF9317D2EF91FF9101E080 +:1000D00010E0500F611FE038A1F7F23091F700E017 +:1000E000802F00E2902F20E068D20D4F6B2C204330 +:1000F0005055206973206C697665210D000020E061 +:10010000913018F09C3D08F421E0582F692FCDD193 +:10011000019610E0EAEAFAE0E00FF11FE00FF11FAC +:100120007591A491072F0F71003059F010E0000F66 +:10013000E4E0F6E0E00FF11F05911491E02FF12FBC +:1001400009950A2F0C7F0695003051F0E6EAF7E09A +:1001500010E0E00FF11F05911491E02FF12F0995A8 +:100160007295A295072F0E70A0730A2B003051F0E4 +:10017000E8EDF6E010E0E00FF11F05911491E02F9B +:10018000F12F0995BCCF103091F01130B1F00895E6 +:100190001030A9F01230E1F01031E1F01231E1F04D +:1001A0001431E1F01531E1F01631E1F008951091CC +:1001B000C00000E017FD0FEF089514D20895FDD19F +:1001C00044656275673A2000F3D1F7D10D000895B8 +:1001D00010D20895B02E0895C02E0895E02E0895EF +:1001E000D02E08950F935C2D60E01B2D103031F060 +:1001F0000AE1500F00E0601F1A95F8CF0F9101300F +:1002000011F0023019F15F936695579566955795F1 +:10021000BDD05F91E0E0F2E000E810E050FDE00FBB +:1002200050FDF11F51FDF3956D2D5E2D10E81F93CC +:100230000191FF93EF9360D1EF91FF9101E010E006 +:10024000500F611F1F911A9591F708955F936F9357 +:10025000669557956695579599D06F915F915F9385 +:100260006F93E0E0F2E000E810E050FDE00F50FD99 +:10027000F11F51FDF3956D2D5E2D10E81F93FF9337 +:10028000EF9313D1EF91FF91019301E010E0500F34 +:10029000611F1F911A9591F76F915F916695579520 +:1002A000669557959BD008950FEF0EBD0DB507FFCE +:1002B000FDCF0EB50895E0E0F0E0F6DF0F3F21F44A +:1002C0003196FF3F11F0F9CF0895012F71D175D10B +:1002D0003A204572726F723A204D4D432072657319 +:1002E000702074696D656F7574210D00A3C003E5FE +:1002F0000CBD5C9A14E1012FD8DF1A95E1F75C98E8 +:10030000D3DFD2DFD1DFD0DFCFDFCEDF5C9ACCDF2F +:10031000CBDFCADFC9DF5C980FEFC7DF0FEFC5DFA8 +:1003200000E4C3DF00E0C1DF00E0BFDF00E0BDDFCD +:1003300000E0BBDF05E9B9DF0FEFB7DF10E0BBDF9F +:100340005C9AB2DF16E91F935C980FEFAEDF01E411 +:10035000ACDF00E0AADF00E0A8DF00E0A6DF00E0FD +:10036000A4DF05E9A2DFA0DF11E0A5DF003041F046 +:100370005C9A9ADF1F911A95103029F704E0A5CFF7 +:100380001F915C9A91DF00E00CBD089500E50CBD63 +:100390005C988ADF01E589DF00E0550F661F001FCA +:1003A00084DF062F82DF052F80DF00E07EDF05E996 +:1003B0007CDF0FEF7ADF12E07EDF13E07CDFE0E02E +:1003C000F2E072DF0193E030E1F7F430D1F76CDF57 +:1003D0006BDF5C9A69DF00E00CBD089500E50CBDA1 +:1003E0005C9862DF08E561DF00E0550F661F001FC3 +:1003F0005CDF062F5ADF052F58DF00E056DF05E9E6 +:1004000054DF0FEF52DF11E056DF0EEF4EDFE0E07A +:10041000F2E001914ADFE030E1F7F430D1F744DF58 +:1004200043DF42DF41DF0F3FE9F75C9A3DDF00E049 +:100430000CBD0895F89400E1009360000FE1009373 +:100440006000FFCF0F930BB107710BB905B1007EB0 +:1004500005B9E0FD2C9AE1FD2B9AE2FD2A9AE3FD15 +:10046000299AE4FD289AE5FD5D9AE6FD5E9AE7FD8E +:100470005F9AF0FD5B9A0F910895007F30990160BB +:1004800032990260349904603399086008951F938B +:1004900018B1127E00FD116001FD146002FD1061B3 +:1004A00003FD186018B91F910895F894E62FF0E045 +:1004B000152F110FEE1FFF1FC5DF2D98F0E0E52F60 +:1004C000EF77C0DF00004598000000005A98000058 +:1004D000D4DF5A9A0295459AF0E0E52FE068B2DF42 +:1004E0000000459800005A9800000000C6DF5A9AA4 +:1004F000459A2D9A78940895F89417B11D6117B90B +:10050000C6DFE62FF0E0152F110FEE1FFF1F9ADF59 +:10051000000000002D98F0E0E52FE06893DF000078 +:100520000000459800000000419800000000000015 +:10053000419A459AF0E0E52FEF7784DF0295A7DF37 +:10054000459800000000419800000000419A00001A +:100550000000459A2D9A07B1027E07B908B1027EC4 +:1005600008B9789408950000000000004598000044 +:100570000000000000002D980000000000000000B6 +:10058000459A00000000000000002D9A00000000C5 +:1005900000000000000018950F930F700A3020F043 +:1005A000095C27D00F910895005D23D00F91089525 +:1005B0000295F2DF0295F0DF0895FF91EF910F931E +:1005C000EE0FFF1F0591003031F013D00D30D1F741 +:1005D0000AE00FD0F7CF3196F695E7950F91EF939C +:1005E000FF9308950091C00007FFFCCF0091C60063 +:1005F00008950F930091C00005FFFCCF0F91009369 +:10060000C60008951603170319031B031D031F03D8 +:100610002103230325032C032F033203350338035F +:100620003D034203470354035A0365030895322DE3 +:100630000895332D0895342D0895352D0895362DC0 +:100640000895382D0895372D08953B2F422D09D256 +:100650003B7F10FF34600895342D432D0895362DCF +:10066000452D0895372D482D0895392D4A2D08958B +:10067000632D542D1ADF302F0895652D562D15DF6B +:10068000302F0895682D572D10DF302F08956A2DD3 +:10069000592D0BDF302F6A2D592D01E010E0500F3E +:1006A000611F03DF402F0895582F692FFEDE01964A +:1006B000302F0895582F692FF8DE302F0196582FCC +:1006C000692FF3DE0196402F0895582F692FEDDE34 +:1006D000087340E0302F089581038203840386036A +:1006E00088038A038C038E03900397039A039D0368 +:1006F000BC03BF03A003A503AA03AF03C203C60341 +:10070000CE030895232E0895332E0895432E089581 +:10071000532E0895632E0895832E0895732E089501 +:10072000242EB32F00E0F02EB2FFF3940895342E60 +:10073000432E0895542E632E0895842E732E08950B +:10074000632D542D032FD8DE0895652D562D032FCC +:10075000D3DE0895682D572D032FCEDE08956A2D20 +:10076000592D032FC9DE6A2D592D01E010E0500FDD +:10077000611F042FC1DE0895A42E932E0895942F97 +:10078000832F089522D1832F942F08953F934F9361 +:10079000382F492F09D19F918F910895642F532F9E +:1007A000022DAADE0895FB03FC03080415041A04B5 +:1007B0001F0425042B0434043D044D045F046F041E +:1007C00084048F049A04A504AC04B904C404C904C5 +:1007D000CC04D104CE04E504D404FF0404050905C7 +:1007E0000E05130519051F05240529052D05F60419 +:1007F000FD04FE0444050895B17001E0300F0FB709 +:10080000F32E01FBB6F937FDB06805FBB4F9089586 +:10081000B170B26001E0301B0FB7F32E01FBB6F9E7 +:1008200004FBB7F905FBB4F9089501E010E0300FBF +:10083000411F089501E010E0301B410B0895BC7E7C +:10084000330F10F43160B1600895BC7E369510F41A +:100850003068B16008958894B0FD089437950FB75B +:10086000BC7E00FBB0F908958894B0FD0894331F56 +:100870000FB7BC7E00FBB0F90895B0E0320D0FB7A2 +:1008800001FBB6F904FB303809F4B06805FBB4F994 +:1008900003FBB2F900FBB0F908958894B0FD089409 +:1008A000321D0FB7B0E001FBB6F937FDB06805FBAC +:1008B000B4F903FBB2F900FBB0F9BD7F0895022D36 +:1008C000031B302F0FB701FBB6F904FBB7F905FB8B +:1008D000B4F903FBB2F900FBB0F9B2600895022D40 +:1008E0008894B0FD0894030B302F0FB704FBB7F9C1 +:1008F00005FBB4F903FBB2F900FBB0F930300FB7D8 +:1009000001FBB6F9B2600895B0E032210FB701FBE8 +:10091000B6F904FBB7F905FBB4F9032F0895B0E06D +:1009200032290FB701FBB6F904FBB7F905FBB4F99F +:10093000032F0895B0E032250FB701FBB6F904FB91 +:10094000B7F905FBB4F9032F0895370D481D0FB70C +:1009500000FBB0F9BD7F0895532F642F072DCCDD28 +:1009600001E010E0300F411F532F642F082DC4DD2C +:100970000895532F642F99DD302F01E0500F00E0D0 +:10098000601F93DD402F0895532F642F8EDD302F8D +:1009900008957AD0032F0895B160089501E0B0273B +:1009A00008953095B261089501E010E0901AA10A0F +:1009B000592D6A2D042FA0DD01E010E0901AA10A44 +:1009C000592D6A2D032F98DD0895592D6A2D6DDD5F +:1009D000302F01E010E0900EA11E592D6A2D65DD2B +:1009E000402F01E010E0900EA11E0895082D842EE6 +:1009F000402F072D732E302F089508950895B6FFC8 +:100A00000895A0E070E00895B6FD0895A0E070E0BC +:100A10000895B0FF0895A0E070E00895B0FD089536 +:100A2000A0E070E008951DD010FF0895A0E070E0F0 +:100A3000089517D010FD0895A0E070E00895B7FF65 +:100A40000895A0E070E00895B7FD0895A0E070E07B +:100A50000895022D132F9CDB0895132F94DB302F64 +:100A6000089511E0F0FC1395F1FC1395F2FC139539 +:100A7000F3FC1395F4FC1395F5FC1395F6FC139514 +:100A8000F7FC13951170089598DD496E76616C69D5 +:100A900064206F70636F646520402050433D000008 +:100AA000092F86DD082F84DDFFCF00003201C10150 +:100AB000290D4204420851002114009C69412D0077 +:100AC00029116304630871002118009C5201E1019F +:100AD0004A0D8404840891002120009C6A412E0064 +:100AE0004A11A504A508B100211C009C7201124402 +:100AF0006B0DC604C608D1002150009C6B417249A1 +:100B00006B11E704E708F1002158009C9201920262 +:100B10008C0D0F060F0A11020054009C6C41324CE0 +:100B20008C11210421083100005C42004300440084 +:100B30004500460047004F0041006200630064002A +:100B40006500660067006F0061008200830084001A +:100B50008500860087008F008100A200A300A4000A +:100B6000A500A600A700AF00A100C200C300C400FA +:100B7000C500C600C700CF00C100E200E300E400EA +:100B8000E500E600E700EF00E100020203020402D4 +:100B900005020602070200000102220023002400D1 +:100BA0002500260027002F002100222423242424AE +:100BB0002524262427242F242124222823282428DE +:100BC0002528262827282F282128222C232C242CAE +:100BD000252C262C272C2F2C212C2230233024307E +:100BE0002530263027302F3021302234233424344E +:100BF0002534263427342F342134223C233C243C12 +:100C0000253C263C273C2F3C213C223823382438E5 +:100C10002538263827382F382138022C032C042C6D +:100C2000052C062C072C0F2C012C406A2061B26980 +:100C3000B201726A096431247302406E4002B26DDF +:100C4000009C726E72023128730240724061B27170 +:100C5000118872720A64312C73024076009CB2755E +:100C6000318C7276009C31307302407A6061B279C7 +:100C70003092727A0B6431347302407EAB01B27DE4 +:100C80004A91727E009C313C730240820061B281C5 +:100C90000094728208643138730240868B01B285F9 +:0A0CA00000987286009C112C73026C +:00000001FF diff --git a/avrcpm/diskimage b/avrcpm/diskimage new file mode 100644 index 0000000000000000000000000000000000000000..f3861585f7743ab93e04e5ae9ec7cce94ca32983 GIT binary patch literal 168448 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ćJC%&vxP2dfb)j1E_m2N=!7i^Xb+e)5cX} z5qhbkqN%I7d?$LeE7NXwiH&@5Zc!~#;gFK~1;=+tXr+@Mse7 z5o`KjKzm%%i;Zz%wXrl-m~v8#q5k)Fg+BVv)QrQDC#W421WUI0Q84ICt#<<2sTcaa zASp5P_DtU-^;pXRTYd`?RhkAKRPCB4cuhP1(TP9R9{eSx8-5Fm(t!yzobT<()`88@ zgA~bkL8|HX7ouXHt1eL6K^qt47B#Q97IQ)2px82S)wZr;O1RyU0LTfuZ3T+lN|2!^ zdJPka3}|H_Td{oq;fLwJz7LP!&MpBt4R7j8mjFTWrvBouK583Mb1(d<{LRKmPJnHN zj>?+lhBw(a#rveKNZEpI@E6R-+Qj*>eLVGVi`c6Ga{0|a|5)H21QK-!Ci35Y1gr;` z7uOgM>F+_wnWE1lfAQ7dcaYBb{0{vLbutKY0;y6M;lebVPZ@}iEkoN;(%diqT~ z82!~d{Z;~T&+-g?h&*0HSmF%53k)IU)xk|FWkF<7OpAdg`Dx08l$E!j6ytXFb4R@N z`%?_^9w?ewpgATa(zZt-AC7bYXil$Yl_DEVeVHHuO% zz(^(^N9HZ7tD`?o%m8i`;6{=%eC6Z!dZb)8#4RzyH1@O&W5RZsuhQeZAr6FO_ap0( z5^TCz5T{mg(CJvz?=mI;W#i9-hl-zyZhr0vWm4L^P&c!=E_E^$Hip=58QA$l6ia5> zIN=rnVv(|1Mm=w3x9Vdgm&%Y_!tZxMmB_*Al1N{U@sa6V?|v+CGs`?AK|ys;=xn5; zzI%tL6$K>pjLt}v6@W*TyQ1dgT}zP#d0MmtQkO(_Hi;U?J`kG}5RJdAug6IMZk7T} zrn~HEZ-vMy7tdL$?0C)#)q9gD3CrO-b~l#!Y4vMTrdO`4zpq@wSqQ+$ilyPqIAc{! z5}~0)pBT!)?hZ8FMr$62c7uFk8+6W;c(SI;e(;=En_26t-vrd(`7Dd=wG9^A%b6cH zPm%f+Kfy&pped3E6;Zt=dkUJTvp$zx>2`Hq%%0A9BB+-a1wA0o;$^-~L;W>2-cc0O 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 O&e<}`y8i$E&;J2EV+v&e literal 0 HcmV?d00001 diff --git a/avrcpm/license.txt b/avrcpm/license.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/avrcpm/license.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/avrcpm/readme.txt b/avrcpm/readme.txt new file mode 100644 index 0000000..3affc92 --- /dev/null +++ b/avrcpm/readme.txt @@ -0,0 +1,13 @@ +Tiny howto: + +- Burn the ATMega88. Hex-file is in the avr-directory, fuse-values are given in + the z80.asm file. +- Copy the disk-image raw to disk. No drag&drop, no filesystem, no partitions: + you'll need to do a +dd if=diskimage of=/dev/sdx + under Unix. Make sure to replace sdx with the /dev/sdx with where your SD-card + actually lives! The image is only 256k, so any old MMC/SD will do. I tried + both a nameless 8M MMC and an 1G Kingston SD-card, and both worked fine. +- Build the schematic, start a terminal emulator and play a bit of zork! + +In case you want to rebuild the disk image, see the files in the z80 directory. diff --git a/avrcpm/z80/CPM.SYS b/avrcpm/z80/CPM.SYS new file mode 100644 index 0000000000000000000000000000000000000000..a416870adc352c95da00b804405f30236f9c9a61 GIT binary patch literal 7680 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 cpm.bin + dd conv=sync bs=128 count=44 if=CPM.SYS >> cpm.bin + dd conv=sync bs=128 count=6 if=bios.bin >> cpm.bin + +ipl.bin: ipl.asm + z80asm ipl.asm -o ipl.bin -lipl.lst + +bios.bin: bios.asm + z80asm bios.asm -o bios.bin -lbios.lst + +clean: + rm -f bios.lst bios.bin + rm -f ipl.lst ipl.bin + rm -f cpm.bin diskimage + +install: diskimage dummy + sudo dd if=diskimage of=${INSTALLDISK} conv=sync oflag=direct,sync + sync + cpmls -f avrcpm ${INSTALLDISK} + sync + sleep 1 + sync + + +dummy: diff --git a/avrcpm/z80/bios.asm b/avrcpm/z80/bios.asm new file mode 100644 index 0000000..7023613 --- /dev/null +++ b/avrcpm/z80/bios.asm @@ -0,0 +1,211 @@ +; CP/M BIOS for avrcpm +; Copyright (C) 2010 Sprite_tm +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . + + +org $4A00+$A800 + jp boot + jp wboot + jp const + jp conin + jp conout + jp list + jp punch + jp reader + jp home + jp seldsk + jp settrk + jp setsec + jp setdma + jp read + jp write + jp listst + jp sectran + +boot: + xor a + ld (3),a + ld (4),a + +wboot: + ld a,'B' + out (2),a + ld a,'I' + out (2),a + ld a,'O' + out (2),a + ld a,'S' + out (2),a + ld a,13 + out (2),a + ld a,10 + out (2),a + + ;ToDo: re-load CP/M + + ld hl,firstBytes + ld de,0 + ld c,100 ;7 +fbloop: + ld a,(hl) + ld (de),a + inc hl + inc de + dec c + jp nz,fbloop + + ld c,0 + jp $3400+$A800 + +const: + in a,(0) + ret + +conin: + in a,(0) + cp $ff + jp nz,conin + + in a,(1) + ret + +conout: + push af + ld a,c + out (2),a + pop af + ret + +list: + ret + +punch: + ret + +reader: + ld a,$1F + ret + +home: + push af + ld a,0 + out (16),a + pop af + ret + +seldsk: + push af + ld a,c + cp 0 + jp nz,seldsk_na + ld hl,dph + pop af + ret +seldsk_na: + ld hl,0 + pop af + ret + +settrk: + push af + ld a,c + out (16),a + pop af + ret + +setsec: + push af + ld a,c + out (18),a + pop af + ret + +setdma: + push af + ld a,c + out (20),a + ld a,b + out (21),a + pop af + ret + +read: + ld a,1 + out (22),a + ld a,0 + ret + +write: + ld a,2 + out (22),a + ld a,0 + ret + +listst: + ld a,0 + ret + +sectran: + ;translate sector bc using table at de, res into hl + ;not implemented :) + ld h,b + ld l,c + ret + + +firstBytes: + jp $4A03+$A800 ;JMP WBOOT + db 0 ;IOBYTE + db 0 ;user:drive + jp $3C06+$A800 ;JMP BDOS + +;Disk Parameter Header +dph: + dw trans ;XLT: Address of translation table + dw 0 ;000: Scratchpad + dw 0 ;000: Scratchpad + dw 0 ;000: Scratchpad + dw dirbuf ;DIRBUF: Address of a dirbuff scratchpad + dw dpb ;DPB: Address of a disk parameter block + dw chk ;CSV: Address of scratchpad area for changed disks + dw all ;ALV: Address of an allocation info sratchpad + +dpb: + dw 26 ;SPT: sectors per track + db 3 ;BSH: data allocation block shift factor + db 7 ;BLM: Data Allocation Mask + db 0 ;Extent mask + dw 242 ;DSM: Disk storage capacity + dw 63 ;DRM, no of directory entries + db 192 ;AL0 + db 0 ;AL1 + dw 16 ;CKS, size of dir check vector + dw 2 ;OFF, no of reserved tracks + +trans: + db 0,1,2,3,4,5,6,7,8,9 + db 10,11,12,13,14,15,16,17,18,19 + db 19,20,21,22,23,24,25,26 + +dirbuf: + ds 128 + +chk: + ds 16 + +all: + ds 31 + +end \ No newline at end of file diff --git a/avrcpm/z80/cpmdsk/ASM.COM b/avrcpm/z80/cpmdsk/ASM.COM new file mode 100644 index 0000000000000000000000000000000000000000..a63e5aec663546b7aac7b330a9ebe8be3a46ba33 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/DUMP.COM b/avrcpm/z80/cpmdsk/DUMP.COM new file mode 100644 index 0000000000000000000000000000000000000000..03a77c3ca8b8bebcda6664c086872b01db043691 GIT binary patch literal 512 zcmXX@L2DC16n<~bu4H9*8)6LA%cPr&iAY)`)lveLL@18>AyNbnIV6HP70IEO(YK`!-p4oZ`##yTvE#b4CQAW{9MI{t&zjaD7R5=qCS|aj0YqPpO3+r-)ccYO2i- zP=3S1@Brt<)-_m+Zq|nB{X_9(ZVwVq!FD1qEsglqi&YP*k1DLZ{g!E*Zm6$S8kJg;kzB4ema~5{lcWA{)7GRhH8}2`3dI5y57ezdS%G>R zF6zRzWD0DPK*;!IWraCiW+7YxJC^Z`B6BU?1Y0Nmiu6d@1~+o~&tSnb6caxR$~@_v zsi_m6vP(c(0ssLh6W>=X{0edhUOvA`MGu}HUwW-#{3G07-qmA5z5|}qMMj6BU-apZ xW(*MNbb53*!t|&h#yQUz?{@faaNl%-d_HgSUtkF%)=zlG^$yq2P3n9C{{b^Cz8e4l literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/ED.COM b/avrcpm/z80/cpmdsk/ED.COM new file mode 100644 index 0000000000000000000000000000000000000000..a0f0f5410f0542e3e6d05bfcd0fb361d84c73f26 GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/LOAD.COM b/avrcpm/z80/cpmdsk/LOAD.COM new file mode 100644 index 0000000000000000000000000000000000000000..b9601e002cc09df45e29331795412a0f0be8e217 GIT binary patch literal 1792 zcmbtUUu+ab7@xV@Kkaq)%2KFuYT3OzE8PR3=jAMGuXKC6&A<>jV zVhvbnVw6ba!3WR>A@RXzeA7rmeZaJv5~j&SX(A+j!3QZZ_h4c|l&G!W%w1D`c5^p7 zzu)ise)HYTHx~{@jG}*FG$`#Gt{K~kJx1^D=lixBZfRes=9G=Vt9njQ95%cl@B`aO zZ#T-m;~I|Zf>brqZmGH-q8v9}svPoyn&Aj_(T3gR9JAl^Vx|sn_I`E2q;8qP@N6o7kX)s1b zr&952hJOHvs(&yjdg-D+Qt^!uKk#5#NUHh4s8K!OaH$bpEc;c@*jp-lY3qUdh?)rP zPCii0DDK8|?oQN+HF@^Mv+Yq4KPupWWfkVe?gBI-)hg+_1>SJ+Px_Ckc38kw*((v9lz z2zynfagF^DiN|1|W}Hk6w8D5}QHk1da?`mJ^FavP1=_{u)NCgcb~{=AV=Fv9t4BC! z=M!q`T+Cbj&*@h^*r}&$i9fICS>hV^-qPdx4D974F+z~be5nDKedoT;4*5eHl z_hOK&PL48BQTda?=Lzs>XD8Hbf>5(dP)`B1VU02bwG}A6N$Cj1H?GM^A)6p~h+@(L zrvPt)5NdV{{50Ur0&f%e8Ni)u7M7rTfO?Ef%P=Dt3EQ~+eJ4qqC6V7kph-78R zeQO7qjZMNVmCO(TspJk4_Da-hgJ~PlSEKB*x^zkcjAJdWZ}X06@Marf*VUyZDf~#% zrx65f0b%h?DO{3x=iG~Ccaaq|_pOAd(R?%C9qF2eJ_+wiHi&rPmV_PNL`^xLFju4C z5}ubD>)5dtv0|Pi`$*CzQ`vrvH)@U~3z`{g$tT#Tv|=x4au|`#EXgBQP_w;!T|*8( zmF-@l+k~A`>zUK3Q=mPB@3GloR#v%3CmBF`p0F>~Yjaf@jxz}W44xy9Sl~XZ3vbB4 z`0Q^krywI7mGwS?I|;j@F22v%4AjP+Rblz}R?xy#8GpfBg-t6^6Zgy!oFjTc;|X(e z9R17da~aQwzREW`3EvW^uZivoWH-^WK>gYX^er?fHTP%}xS;8cQaTj8pKqnUimZaR zrEUU!U0pn>n1fm#4V;75jinYAA@N1caJ8j1= zl#h--AkQpztN5}gU|JF6%@}2WDd*vN2=Ce9uPB^Zc1YvLHfaxO)O5Ae@CQ+ZJ&Cul zi>mEv?3_wNghH8rn2ac;^<$l=o_Ke>Bk{o)h56ZQ<7d7Zqc5fo)qAwLi>lx*ji32s mjGlO@lG>a25JEp5qvPEuaS5it^Q_Cq&ZMp$uG7T-d;S66tN&L3 literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/MBASIC.COM b/avrcpm/z80/cpmdsk/MBASIC.COM new file mode 100644 index 0000000..5914e3d --- /dev/null +++ b/avrcpm/z80/cpmdsk/MBASIC.COM @@ -0,0 +1 @@ +åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå \ No newline at end of file diff --git a/avrcpm/z80/cpmdsk/PIP.COM b/avrcpm/z80/cpmdsk/PIP.COM new file mode 100644 index 0000000000000000000000000000000000000000..4b2ce4b689b9be798eec94cd4275aee957c8bd07 GIT binary patch literal 7424 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 literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/SUBMIT.COM b/avrcpm/z80/cpmdsk/SUBMIT.COM new file mode 100644 index 0000000000000000000000000000000000000000..2e788827b2a45aea667092573f2263b67f9243f2 GIT binary patch literal 1280 zcmbVMOK2Nc6n#%KPeBGx|AC4&ej`ttbd*wOk|=nPRj|^KLR^KUpG_Mxk;ayYJmZYV z`uHQu-INBhDqXa+gl2a29xys?v)EWAUQ*uqpOO&iVF=1E*Iy^l#W`aV+ zbjHed^&kF4+os2CYg{>QIL3tOLQc2vd8=ZSO9h&>E!VNjG+Ts(Jj9`gW9D7ksna9V z<+74BEX#Ijwro$Cd+7<&C_Iz1%JpXz8KJ?%Z6d!V-3>mA1m}dHBL;5}U;c(nCeNy0 zlMN{roCEwV$2S1q7n~>B8c^SJ>N}wB-===#)DJ*C#H-dhz6tnYNb%*LIsOUoBOL$A z@h^aPZcA*EsU);ce!c?VFZ4|^q-~PU*6PKGxbx`(Tot|jEZ80ZgONFMt4nPP@jE&=2%MFpANPIv5gYPA2KyQGuiOr8c|71<5`B4A zI;&Qsez>^@wsr*XkZ?`J1vUz>xDt)&vr<*BNolPHH!!~({w3l$e&_5Jo{q?05!e!N zU%R&%j}v^E#e*55H6(Z>ljsdeYa+G)iwJf~ZLq0d2Up1;xglK%M+sziX;_gea0k6% z64V3_)Id9aPrFX=b>16hOTxr#zJ~81F2M6D4sMuW6^oJmsllHu|`jC9jEbE6uwq?cZL z2z=-{=%I+BkU|FA#fN+0K1^AGK_H?ad+MRr*>|<)&cpe>^EWg|hr`^;SmQvJ9SI37E$JA6N z?XaaxR+^p8=~-q}kFc|QHe;7%{=PB@kp=OJhH|(riuHkN33wm z)TxRl(m_>vMB^N1$^gn(n0*c<>?w~u?3MdO@_84cTHYyhY%JVhpF+WF3H!Mh*F(19 zi7>GV)_X2S6|FT6U%BiLULq>vC)}t&^N~K$Sm*pDpo<_mkX{L-lIFTn8XeI(0X(wb Y+cM%=k)A5D2B>txs!Q>=Q276^zh*|>DF6Tf literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/ZORK1.COM b/avrcpm/z80/cpmdsk/ZORK1.COM new file mode 100644 index 0000000000000000000000000000000000000000..8a7bec1cc6002e4fa5ec55ac633be1ff25324249 GIT binary patch literal 8704 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 O6`a-o!We(@(EkJ+CiOf3 literal 0 HcmV?d00001 diff --git a/avrcpm/z80/cpmdsk/ZORK1.DAT b/avrcpm/z80/cpmdsk/ZORK1.DAT new file mode 100644 index 0000000000000000000000000000000000000000..b2eb461fb7112e03f8673c1443ad902ea020c955 GIT binary patch literal 84992 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 LrmXA#>;L|L*_f`( literal 0 HcmV?d00001 diff --git a/avrcpm/z80/ipl.asm b/avrcpm/z80/ipl.asm new file mode 100644 index 0000000..4d229f2 --- /dev/null +++ b/avrcpm/z80/ipl.asm @@ -0,0 +1,74 @@ +; CP/M IPL for avrcpm +; Copyright (C) 2010 Sprite_tm +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . + +org $2000 + ; IPL for the CP/M-emu in an AVR. Loads CPM from the 'disk' from + ; track 0 sector 2 to track 1 sector 26. + + ld sp,$1000 + + call printipl + + + ld b,49 + ld de,$0001 + ld hl,$3400+$A800 +loadloop: + ld a,d ;track + out (16),a + ld a,e ; sector (base-0) + out (18),a + ld a,l ;dma L + out (20),a + ld a,h ;dma H + out (21),a + ld a,1 + out (22),a + + push bc + ld bc,$80 + add hl,bc + pop bc + + inc e + ld a,e + cp 26 + jp nz,noNextTrack + + inc d + ld e,0 + +noNextTrack: + + dec b + jp nz,loadloop + + jp $4A00+$A800 + +printipl: + ld a,'i' + out (2),a + ld a,'p' + out (2),a + ld a,'l' + out (2),a + ld a,13 + out (2),a + ld a,10 + out (2),a + ret + +end \ No newline at end of file diff --git a/avrcpm/z80/readme.txt b/avrcpm/z80/readme.txt new file mode 100644 index 0000000..bf2d16c --- /dev/null +++ b/avrcpm/z80/readme.txt @@ -0,0 +1,20 @@ +To rebuild the disk-image, you need: +- dd +- z80asm +- cpmtools + +The disk format the emulator uses is somewhat weird: it's the same as +the ibm-3740 disk format but without track skew. To be able to write it. +add this text as the first entry in your /etc/cpmtools/diskdefs: + +diskdef avrcpm + seclen 128 + tracks 77 + sectrk 26 + blocksize 1024 + maxdir 64 + skew 1 + boottrk 2 + os p2dos +end + -- 2.39.2