; Disassembly of the file "C:\HD64180\DISK3\D0001v2.bin" ; ; CPU Type: Z180 ; ; Created with dZ80 2.0 ; ; on Tuesday, 09 of October 2007 at 10:06 AM ; IIOOFF: EQU 0C0H ;;IIOOFF: EQU 000H ; 00H ;--------- ASYNCHRONOUS COMMUNICATION INTERFACE CH0 / CH1 ----------------- CNTLA0: EQU 000H+IIOOFF ;ASCI Control Register A Ch 0 CNTLA1: EQU 001H+IIOOFF ;ASCI Control Register A Ch 1 CNTLB0: EQU 002H+IIOOFF ;ASCI Control Register B Ch 0 CNTLB1: EQU 003H+IIOOFF ;ASCI Control Register B Ch 1 STAT0: EQU 004H+IIOOFF ;ASCI Status Register Ch 0 STAT1: EQU 005H+IIOOFF ;ASCI Status Register Ch 1 TDR0: EQU 006H+IIOOFF ;ASCI Transmit Data Register Ch 0 TDR1: EQU 007H+IIOOFF ;ASCI Transmit Data Register Ch 1 RDR0: EQU 008H+IIOOFF ;ASCI Receive Data Register Ch 0 RDR1: EQU 009H+IIOOFF ;ASCI Receive Data Register Ch 1 ;--------- CLOCKED SERIAL I/O --------------------------------------------- CNTR: EQU 00AH+IIOOFF ;CSI/O Control Register TRDR: EQU 00BH+IIOOFF ;CSI/O Transmit/Receive Data Register ;--------- PROGRAMMABLE RELOAD TIMER -------------------------------------- TMDR0L: EQU 00CH+IIOOFF ;Timer Data Register Ch 0L TMDR0H: EQU 00DH+IIOOFF ;Timer Data Register Ch 0H RLDR0L: EQU 00EH+IIOOFF ;Reload Register Ch 0L RLDR0H: EQU 00FH+IIOOFF ;Reload Register Ch 0H TCR: EQU 010H+IIOOFF ;Timer Control Register TMDR1L: EQU 014H+IIOOFF ;Timer Data Register Ch 1L TMDR1H: EQU 015H+IIOOFF ;Timer Data Register Ch 1H RLDR1L: EQU 016H+IIOOFF ;Reload Register Ch 1L RLDR1H: EQU 017H+IIOOFF ;Reload Register Ch 1H ;--------- DMA CH0 / CH1 -------------------------------------------------- SAR0L: EQU 020H+IIOOFF ;DMA Source Address Register Ch 0L SAR0H: EQU 021H+IIOOFF ;DMA Source Address Register Ch 0H SAR0B: EQU 022H+IIOOFF ;DMA Source Address Register Ch 0B DAR0L: EQU 023H+IIOOFF ;DMA Destination Address Register Ch 0L DAR0H: EQU 024H+IIOOFF ;DMA Destination Address Register Ch 0H DAR0B: EQU 025H+IIOOFF ;DMA Destination Address Register Ch 0B BCR0L: EQU 026H+IIOOFF ;DMA Byte Count Register Ch 0L BCR0H: EQU 027H+IIOOFF ;DMA Byte Count Register Ch 0H MAR1L: EQU 028H+IIOOFF ;DMA Memory Address Register Ch 1L MAR1H: EQU 029H+IIOOFF ;DMA Memory Address Register Ch 1H MAR1B: EQU 02AH+IIOOFF ;DMA Memory Address Register Ch 1B IAR1L: EQU 02BH+IIOOFF ;DMA I/O Adress Register Ch 1L IAR1H: EQU 02CH+IIOOFF ;DMA I/O Adress Register Ch 1H BCR1L: EQU 02EH+IIOOFF ;DMA Byte Count Register Ch 1L BCR1H: EQU 02FH+IIOOFF ;DMA Byte Count Register Ch 1H DSTAT: EQU 030H+IIOOFF ;DMA Status Register DMODE: EQU 031H+IIOOFF ;DMA Mode Register DCNTL: EQU 032H+IIOOFF ;DMA / WAIT Control Register ;--------- INTERRUPT ------------------------------------------------------ IL: EQU 033H+IIOOFF ;IL Register (INT Vector Register) ITC: EQU 034H+IIOOFF ;INT / TRAP Control Register ;--------- REFRESH -------------------------------------------------------- RCR: EQU 036H+IIOOFF ;Refresh Control Register ;--------- MEMORY MANAGEMENT UNIT ----------------------------------------- CBR: EQU 038H+IIOOFF ;MMU Common Base Register BBR: EQU 039H+IIOOFF ;MMU Bank Base Register CBAR: EQU 03AH+IIOOFF ;MMU Common/Bank Area Register ;--------- I/O CONTROL ---------------------------------------------------- ICR: EQU 03FH+IIOOFF ;I/O-Control Register ICRRES: EQU 03FH ;I/O-Control Register after reset ;-------------------------------------------------------------------------- l0018: EQU 0018H ;l0030: EQU 30H NCH: equ 1 MFCT: equ 4 CTRLA: EQU 01101000B CTRLB: EQU 00000000B STREG: EQU 00000100B FCT: EQU 2 CH: EQU 3 PAR: EQU 4 CHRO: EQU 4 CHRI: EQU 0 POINT: EQU 4 OSTARD: EQU 004H ORDCNTLA: EQU 008H OSTTDR: EQU 002H MODE0: EQU 0 MODE1: EQU 1 MODE2: EQU 2 PEO: EQU 4 RDRF: EQU 7 TDRE: EQU 1 EFR: EQU 3 DDB: EQU 3 PARITY: EQU 4 STOP: EQU 7 EO: EQU 5 RCA: EQU 0 TDY: EQU 1 BAUD: EQU 00000111B SMASK: EQU 00000011B RCST: EQU 10000000B TRST: EQU 00000010B MERR: EQU 01110000B CNA: EQU 00000001B FNA: EQU 00000010B NAFCT: EQU 4 ; BSY: EQU 0 STA: EQU 1 ; FCT: EQU 2 DRV: EQU 3 HD: EQU 4 TRK: EQU 5 SEC: EQU 6 ; SECTOR RESO: EQU 7 DMA: EQU 8 NHD: EQU 10 NTRK: EQU 11 NSEC: EQU 12 ; ANZAHL DER SEKTOREN PRO TRACK EINER SEITE NBYT: EQU 13 ; ANZAHL DER BYTES PRO SEKTOR DNTP: EQU 14 ; DENSITY / 5.25"/8" LAUFWERK SRAT: EQU 15 ; STEPRATE IDRV: EQU 0 ; DRIVE IHD: EQU 1 ; SIDE (HEAD) ITRK: EQU 2 ; TRACK ISEC: EQU 3 ; SECTOR IVAL: EQU 4 ; VALID-FLAG IDMA: EQU 5 ; INTERNAL DMA COMPAREFLAG IFC: EQU 40H ; BASISADRESSE DES CONTROLLER STATF: EQU 04H ; OFFEST FUER STATUS INDAT: EQU 00H ; OFFEST FUER EINGABE VOM CONTROLLER OUDAT: EQU 02H ; OFFEST FUER AUSGABE AN DEN CONTROLLER TMOUT: EQU 0FFFFH ; TIMEOUTWERT FUER INTERFACE-STATUSABFRAGE CDERR: EQU 001H ; STAUS COMMAND-ERROR TERR: EQU 002H ; STATUS TIMEOUT-ERROR FWAIT: EQU 0AH ; WAITSTATES FUER INIR-BEFEHL SDCD: EQU 0 ; SET DRIVE COMMAND STCD: EQU 1 ; SET TRACK COMMAND SSCD: EQU 2 ; SET SECTOR COMMAND RDCD: EQU 3 ; READ COMMAND WRCD: EQU 4 ; WRITE COMMAND FRCD: EQU 5 ; FORMAT COMMAND MKDN: EQU 0F0H ; MASKE DENSITY DD / SD MKTP: EQU 00FH ; MASKE TYP LAUFWERK (5.25"/8") ;KONSTANTENVEREINBARUN6EN ALLGEMEIN FF: EQU 0CH CR: EQU 0DH LF: EQU 0AH EOT: EQU 04H WAIT: EQU 00000000B ; MEM-WAITSTATES / I/O-WAITSTATES RFSH: EQU 00000000B ;KONSTANTEWEREINBARUNGEN RBIOS HD64180 VCBAR: EQU 080H ; BANKAREA / COMMON1 LIMIT AT 08000H VBBR: EQU 010H ; BANKBASE AT 01000H VCBR: EQU 000H ; COMMON1 BASE AT 08000H BVBBR: EQU 000H ; BANKBASE FOR BOOT = 0000H CHPAR0: EQU 11001110B CHPAR1: EQU 11001100B CCPTRK: EQU 00 ; CCP-START=TRACK 05 CCPSEC: EQU 02 ; SEC 01 NCCPSC: EQU 08 ; NUMBER OF CCP-SECTORS BDTRK: EQU 00 ; BDOS-START=TRK 05 BDSEC: EQU 10 ; SEC 01 NBDSEC: EQU 14 ; NUMBER OF BDOS-SECTORS MAXSEC: EQU 16 ; MAXIUM SECTORNUMBER PER TRACK SECLEN: EQU 256 ; LENGTH OF SECTOR ; SYMBOLE FUER ASC ;;INIT: EQU 0 STAT: EQU 1H ; STAT01 ;;CIN: EQU 2 ;;COUT: EQU 3 ;;SOUT: EQU 4 ASCFCT: EQU 2 ASCCH: EQU 3 ASCPAR: EQU 4 ;CHRO: EQU 4 ;CHRI: EQU 0 ;POINT: EQU 4 ; SYMBOLE FUER FBC ;;FINIT: EQU 0 FRD: EQU 1H FWR: EQU 2 FFORM: EQU 3 FBSY: EQU 0 FSTA: EQU 1H FFCT: EQU 2 FDRV: EQU 3 FHD: EQU 4 FTRK: EQU 5 FSEC: EQU 6 FRESO: EQU 7 FDMA: EQU 8 FNHD: EQU 10 FNTRK: EQU 11 ;NUMBER OF TRACKS PER SIDE FNSEC: EQU 12 ; NUMBER OF SECTORS PER TRACK & SIBE FNBYT: EQU 13 ; C0DED LENGTH OF SECTOR FDNTP: EQU 14 ; DENSITY / TYP FSRAT: EQU 15 ; STEPRATE IOBYTE: EQU 00003H ; ADR. IOBYTE DRVUSR: EQU 00004H ; ADR. DRIVE USER JWBT: EQU 00000H ; ADR, JP-INTRUCT. TO WARMBOOT JBDOS: EQU 00005H ; ADR. JP-INTRUCT. TO BSOS DDMA: EQU 00080H ; ADR. DEFAULT DMA-BUFFER DVIO: EQU 00H ; DEFAULT-VALUE IOBYTE DVDU: EQU 00H ; DEFAULT-VALUE DRIVE USER DPHOFF: EQU 0076H ; HR 08.10.2007 CBLOFF: EQU 0066H l0000: EQU 0000H T1: EQU 1000H org 0da00h BIOS: jp BINIT ;lda5e jp WARMBT ;ldb56 jp CONST ;ldbec jp CONIN ;ldc0c jp CONOUT ;ldc30 jp PLIST ;ldc51 jp PUNCH ;ldd00 jp READER ;ldd01 jp HOME ;ldd7f jp SLDSK ;ldd9d jp SETTRK ;lddc1 jp SETSEC ;ldddf jp SETDMA ;lddfe jp READ ;lde04 jp WRITE ;lde4e jp PLISTST ;ldcbd jp SECTRAN ;ldd9a jp ASC ;ldf4b jp FDC ;le05d HEADER: DA39: DEFB 1EH DEFB 1BH DA3B: DEFM "Y" DEFM "C" DEFM "P" DEFM "/" DEFM "M" DA40: DEFM " 2.2 " VERS: DEFM "56" DEFM "K BIOS 1." DA50: DEFM "06 290288ji" ; 12.10.2007 HR DEFB 0dh DEFB 0ah DEFB 04h Test: EQU 0da00h+346h ; DD46 BINIT: DA5E: ld sp,TOS ;0df4ah ld a,WAIT ;00h out0 (DCNTL),a ; Z180 instruction lda66: ld a,RFSH ;00h out0 (RCR),a ; Z180 instruction ld hl,COLDBOOT ;ldb18 ld (BIOS+1),hl ld a,VCBAR ;80h out0 (CBAR),a ; Z180 instruction ld a,VBBR ;10h out0 (BBR),a ; Z180 instruction ld a,VCBR ;00h out0 (CBR),a ; Z180 instruction lda80: ld a,43h ld (DBBD),a ; 0dbbdh DRVUSR ld ix,SRDTIX ;0deffh lda89: ld (ix+03h),00h ld (ix+02h),00h lda91: ld (ix+04h),0ceh call ASC ;ldf4b jp c,BIOS ;lda00 ld (ix+03h),01h ld (ix+04h),0cch call ASC ;ldf4b jp c,BIOS ;lda00 ld c,31h ld hl,DAD2 ;0dad2h ld b,02h otir ld c,33h ; Port 33h ld hl,DAD4 ;0dad4h ld b,04h otir ld a,0ffh out (32h),a ; Port 32h ld b,0ffh DAC1: ldac1: djnz DAC1 ;l00c1 ; (-02h) ld a,0dfh out (32h),a ld b,0ffh DAC9: ldac9: djnz DAC9 ;l00c9 ; (-02h) ld a,0ffh out (32h),a ; Port 32h jp DAD8 ;ldad8 DAD2: ; rrca ; rlca DEFB 0FH DEFB 07H DAD4: ; rst 08h DEFB 0CFH DAD5: ; rst 08h ; rla ; rst 38h DEFB 0CFH DEFB 17H DEFB 0FFH ;;WARMBT: DAD8: ld hl,BIOS ;lda00 ld a,h add a,06h srl a srl a ld b,a xor a l00e4: add a,01h daa djnz l00e4 ; (-05h) DAE9: call H8A2 ;le5b0 ld a,d ld (VERS),a ;0da45h ld a,e ld (VERS+1),a ;0da46h ld (ix+03h),00h ld (ix+02h),04h ld hl,HEADER ;0da39h ld (ix+04h),l ld (ix+05h),h call ASC ;ldf4b jp c,BIOS ;lda00 ld a,81h ; ld (IOBYTE),a ; 0003h ld a,00h ld (0004h),a jp WARMBT ;ldb56 COLDBOOT: DB18: di in0 a,(ITC) ; Z180 instruction and 0f8h out0 (ITC),a ; Z180 instruction in0 a,(TCR) ; Z180 instruction and 0cfh out0 (TCR),a ; Z180 instruction in0 a,(DSTAT) ; Z180 instruction and 0f3h out0 (DSTAT),a ; Z180 instruction in0 a,(CNTR) ; Z180 instruction and 0bfh out0 (CNTR),a ; Z180 instruction in0 a,(STAT0) ; Z180 instruction and 0f6h out0 (STAT0),a ; Z180 instruction in0 a,(STAT1) ; Z180 instruction and 0f6h out0 (STAT1),a ; Z180 instruction ld a,00h out0 (BBR),a ; Z180 instruction ld a,00h out0 (ICR),a ; Z180 instruction jp l0000 WARMBT: DB56: LOADCCP: ld sp,TOS ;0df4ah call KILL ;lded5 ld ix,DPH ;0e494h ld de,CBLOFF ;l0066 add ix,de ld (ix+02h),00h ; INIT CONTROLLER call FDC ;le05d ld (ix+05h),00h ; START OF CCP TRACK ld (ix+06h),02h ; START OF CCP SECTOR ld hl,BIOS-1600h ;lc400 ld b,08h ; NUMBER OF CCP-SECTORS ld de,SECLEN ;0100h ; SECTORLENGTH call LOAD ; READ CCP ldbbe jp c,COLDBOOT ;ldb18 LOADBDOS: ld (ix+05h),00h ; START OF BDOS TRACK ld (ix+06h),0ah ; START OF BDOS SECTOR ld hl,BIOS-0E00H ; 0cc00h ld b,0eh ; NUMBER OF BDOS SECTORS call LOAD ; READ CCP ldbbe jp c,COLDBOOT ;ldb18 ld a,0c3h ld (l0000),a ld hl,BIOS+3 ;0da03h ld (0001h),hl ld (0005h),a ld hl,BIOS-0E00h+6 ;0cc06h ld (0006h),hl ld a,(0004h) ld c,a ld a,(DBBD) ; 0dbbdh cp 43h ld a,00h ld (DBBD),a ;************************************************************************* ;************************************************************************* Test3: EQU BIOS-1600h ;lc400 Test4: EQU BIOS-1600h+3 ;lc403 Test5: EQU BIOS-0E00h ;0cc00h Test6: EQU BIOS+500H ; 0DF00H Test7: EQU BIOS+07F0H ; 0E1F0H Test8: EQU BIOS+06E0H ; 0E0E0H ;************************************************************************* ;************************************************************************* jp z,BIOS-1600h ;lc400 jp BIOS-1600h+3 ;lc403 ;;DRVUSR: DBBD: DEFB 0D1H ;04h ; 0D1H ;1B0H ;; pop de LOAD: DBBE: ld (ix+02h),01h ld c,11h LOAD1: l01c4: ld (ix+08h),l ld (ix+09h),h call FDC ;le05d ret c DBCE: inc (ix+06h) ld a,(ix+06h) cp c jp c,LOAD2 ;ldbdf inc (ix+05h) ld (ix+06h),01h LOAD2: DBDF: add hl,de djnz LOAD1 ;l01c4 ; (-1eh) ld hl,0e314h ld (ix+08h),l ld (ix+09h),h ret CONST: DBEC: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,SRDTIX ;0deffh ld (ix+02h),01h ld (ix+03h),00h call ASC ;ldf4b and 01h ld sp,(BDOSSP) ret z ld a,0ffh ret CONIN: DC0C: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,SRDTIX ;0deffh ld iy,SRDTIY ;0df09h ld (ix+02h),02h ld (ix+03h),00h call ASC ;ldf4b ld a,(iy+00h) and 7fh ld sp,(BDOSSP) ret CONOUT: DC30: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,SRDTIX ;0deffh ld (ix+02h),03h ld (ix+03h),00h ld a,c and 7fh ld (ix+04h),a call ASC ;ldf4b ld sp,(BDOSSP) ret PLIST: DC51: ld (BDOSSP),sp ld sp,TOS ;0df4ah DC58: ld a,(0003h) DC5B: and 0c0h cp 80h DC5F: jp z,DC6D ;ldc6d cp 0c0h jp z,DC84 ;ldc84 call DD04 ;ldd04 jp DC58 ;ldc58 DC6D: ld ix,SRDTIX ;0deffh ld (ix+02h),03h ld (ix+03h),01h ld (ix+04h),c DC7C: call ASC ;ldf4b ld sp,(BDOSSP) ret DC84: in a,(32h) ; Port 32h bit 2,a jp nz,DC91 ;ldc91 call DD04 ;ldd04 jp DC58 ;ldc58 DC91: ld b,10h l0293: ld hl,0ffffh DC96: in a,(32h) ; Port 32h bit 1,a DC9A: jp z,DCAB ;ldcab dec hl ld a,l or h jp nz,DC96 ;ldc96 DCA3: djnz l0293 ; (-12h) call DD04 ;ldd04 jp DC58 ;ldc58 DCAB: ld a,c out (30h),a ; Port 30h DCAE: in a,(32h) res 4,a out (32h),a ; Port 32h set 4,a out (32h),a ; Port 32h ld sp,(BDOSSP) ret PLISTST: DCBD: ld (BDOSSP),sp ld sp,TOS ;0df4ah DCC4: ld a,(0003h) and 0c0h cp 80h jp z,DCD9 ;ldcd9 cp 0c0h jp z,DCF2 ;ldcf2 call DD04 ;ldd04 jp DCC4 ;ldcc4 DCD9: ld ix,SRDTIX ;0deffh ld (ix+02h),01h ld (ix+03h),01h call ASC ;ldf4b and 02h ld sp,(BDOSSP) ret z ld a,0ffh ret DCF2: ld sp,(BDOSSP) in a,(32h) ; Port 32h bit 1,a ld a,00h ret nz ld a,0ffh ret ;************************************************************************* PUNCH: DD00: ret ;************************************************************************* READER: DD01: ld a,1ah ret ;************************************************************************* DD04: ld ix,SRDTIX ;0deffh ld (ix+03h),00h ld (ix+02h),04h ld hl,DD46 ;0dd46h Fehlermeldung ld (ix+04h),l ld (ix+05h),h DD19: call ASC ;ldf4b DD1C: ld ix,SRDTIX ;0deffh ld iy,SRDTIY ;0df09h ld (ix+02h),02h ld (ix+03h),00h call ASC ;ldf4b DD2F: ld a,(iy+00h) and 7fh cp 41h jp z,WARMBT ;ldb56 cp 57h ret z cp 49h jp nz,DD1C ;ldd1c ld sp,(BDOSSP) ret ;************************************************************************* ;************************************************************************* ;*********************FEHLERMELDUNG*************************************** ;************************************************************************* DD46: DEFB 0dh DEFB 0ah DEFB 07h DD49: DEFM "DEVICE-ERROR (A)bbruch, (I)gnorieren, (W)iederholen ?" DEFB 04h ;************************************************************************* ;************************************************************************* ;**********************BIOS HOME****************************************** ;************************************************************************* HOME: DD7F: l037f: call KILL ;lded5 ld ix,(CBLP) ;0df24h ld (ix+02h),00h l038a: ld (ix+04h),00h ld (ix+05h),00h ld (ix+06h),01h call FDC ;le05d ret ;************************************************************************* SECTRAN: DD9A: push bc pop hl ret ;************************************************************************* SLDSK: DD9D: ld a,(NDRV) ; 0e113h ld b,a ld hl,0 ; l0000 ld a,c cp b ret nc ld hl,DPH ;0e494h ld de,0076h SLDSK1: DDAD: ld a,c and a jp z,SLDSK2 ;lddb7 add hl,de dec c jp SLDSK1 ;lddad SLDSK2: push hl ld de,CBLOFF ;l0066 add hl,de ld (CBLP),hl pop hl ret ;************************************************************************* SETTRK: DDC1: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,(CBLP) ld e,(ix+0bh) ld d,00h call TRTR ;le302 ld (ix+05h),c ld (ix+04h),a ld sp,(BDOSSP) ret ;************************************************************************* SETSEC: DDDF: ld (BDOSSP),sp inc bc ld sp,TOS ;0df4ah ld ix,(CBLP) ld a,(ix+0dh) call TRSC ;le2cd ld (ix+06h),c push de pop hl ld (SECOFF),hl ;0df26h ld sp,(BDOSSP) ret ;************************************************************************* SETDMA: push bc pop hl ld (BDOSDMA),hl ;0df28h ret ;************************************************************************* READ: DE04: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,(CBLP) call COMPARE ;ldeab jp z,READ1 ;lde32 ld (ix+02h),01h ld hl,SECBUF ;0e314h ld (ix+08h),l ld (ix+09h),h call FDC ;le05d jp nc,READ1 ;lde32 call KILL ;lded5 ld a,01h ld sp,(BDOSSP) ret READ1: ld hl,(SECOFF) ;0df26h ex de,hl ld hl,SECBUF ;0e314h add hl,de push hl ld hl,(BDOSDMA) ; 0df28h ex de,hl pop hl ld bc,128 ;l0080 ldir call SAVE ;ldee5 xor a ld sp,(BDOSSP) ret ;************************************************************************* ;************************************************************************* WRITE: DE4E: ld (BDOSSP),sp ld sp,TOS ;0df4ah ld ix,(CBLP) call COMPARE ;ldeab jp z,WRITE1 ;lde7c ld (ix+02h),01h ld hl,SECBUF ;0e314h ld (ix+08h),l ld (ix+09h),h call FDC ;le05d jp nc,WRITE1 ;lde7c call KILL ;lded5 ld a,01h ld sp,(BDOSSP) ret WRITE1: DE7C: ld hl,(SECOFF) ;0df26h ex de,hl ld hl,SECBUF ;0e314h add hl,de push hl ld hl,(BDOSDMA) ; 0df28h pop de ld bc,128 ; LENGTH OF BDOS-SECTOR l0080 ldir ld (ix+02h),02h call FDC ;le05d jp nc,WRITE2 ;ldea2 call KILL ;lded5 ld a,01h ld sp,(BDOSSP) ret WRITE2: call KILL ;lded5 xor a ld sp,(BDOSSP) ret ;************************************************************************* COMPARE: DEAB: ld hl,COMP ;0df1fh ld a,(hl) inc hl cp (ix+03h) jp nz,KILL ;lded5 ld a,(hl) inc hl cp (ix+04h) jp nz,KILL ;lded5 ld a,(hl) inc hl cp (ix+05h) jp nz,KILL ;lded5 ld a,(hl) inc hl cp (ix+06h) jp nz,KILL ;lded5 ld a,(hl) and a jp nz,KILL ;lded5 xor a ret ;************************************************************************* KILL: DED5: ld hl,COMP ;0df1fh ld a,0ffh ld (hl),a inc hl ld (hl),a inc hl ld (hl),a inc hl ld (hl),a inc hl ld (hl),a and a ret ;************************************************************************* SAVE: DEE5: ld hl,COMP ;0df1fh ld a,(ix+03h) ld (hl),a inc hl ld a,(ix+04h) ld (hl),a inc hl ld a,(ix+05h) ld (hl),a inc hl ld a,(ix+06h) ld (hl),a inc hl xor a ld (hl),a ret ;************************************************************************* ;******************DATEN************************************************** ;************************************************************************* SRDTIX: DEFF: DEFS 10 SRDTIY: DF09: DEFS 10 BDOSSP: DF13: DEFS 2 INTREG: DEFS 10 COMP: DEFS 5 CBLP: DF24: DEFS 2 SECOFF: DEFS 2 BDOSDMA: DEFS 2 DF29: STACK: DF2A: DEFS 32 TOS: DF4A: DEFS 1 STACK1: EQU TOS-32 ; 0DF2AH ;************************************************************************* ;************************************************************************* ASC: DF4B: push bc push de push hl ld a,01h cp (ix+03h) jr nc,ASC0 ;l0559 ; (+04h) ld a,01h jr EREND1 ;l0574 ; (+1bh) ASC0: DF59: l0559: ld a,04h cp (ix+02h) DF5E: jp nc,DF65 ;ldf65 ld a,02h jr l0574 ; (+0fh) DF65: ld hl,DF76 ;0df76h ld d,00h ld e,(ix+02h) DF6D: add hl,de add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl jp (hl) ;************************************************************************* ;************************************************************************* EREND1: DF74: l0574: ;; jr l05dc ; (+66h) jr l05dc ; DEFB 18H ; DEFB 66H ;************************************************************************* ;****************DATEN oder Programm************************************** DF76: add a,b rst 18h pop bc rst 18h pop hl rst 18h rla ret po ld sp,3ee0h ret nz add a,(ix+03h) ld c,a ld b,00h ld a,68h bit 3,(ix+04h) jr z,l0592 ; (+02h) set 2,a l0592: bit 4,(ix+04h) jr z,l059a ; (+02h) set 1,a l059a: bit 7,(ix+04h) jr z,l05a2 ; (+02h) set 0,a l05a2: out (c),a inc c inc c ld a,(ix+04h) cpl and 07h or 00h bit 5,(ix+04h) jr nz,l05b6 ; (+02h) set 4,a l05b6: out (c),a inc c inc c ld a,04h out (c),a xor a jr l05dd ; (+1ch) ld a,0c4h add a,(ix+03h) ld c,a ld b,00h ld e,00h in a,(c) bit 7,a jr z,l05d3 ; (+02h) set 0,e l05d3: bit 1,a jr z,l05d9 ; (+02h) set 1,e l05d9: ld a,e jr l05dd ; (+01h) ;************************************************************************* EREND: l05dc: scf ; ERROR:=TRUE ASCEND: l05dd: pop hl pop de pop bc ret ;************************************************************************* CIN: DFE1: ld a,STAT0 ;0c4h add a,(ix+03h) ld c,a ld b,00h CIN0: l05e9: in a,(c) bit 7,a jr z,CIN0 ;l05e9 ; (-06h) and 70h DFF1: jp z,CIN1 ;E00B ;le00b push af ld a,c add a,04h ld c,a in a,(c) ld (iy+00h),a ld a,c sub 08h ld c,a in a,(c) res 3,a out (c),a pop af jr l05dc ; (-2fh) CIN1: E00B: ld a,c add a,04h ld c,a E00F: in a,(c) ld (iy+00h),a xor a jr ASCEND ;l05dd ; (-3ah) ;************************************************************************* COUT: E017: ld a,STAT0 ;0c4h add a,(ix+03h) ld c,a ld b,00h COUT0: l061f: in a,(c) bit 1,a jr z,COUT0 ;l061f ; (-06h) ld a,c add a,02h ld c,a ld a,(ix+04h) out (c),a xor a jr ASCEND ;l05dd ; (-54h) SOUT: E031: ld b,00h ld a,STAT0 ;0c4h add a,(ix+03h) ld e,a ld a,TDR0 ;0c6h E03B: add a,(ix+03h) ld d,a ld l,(ix+04h) ld h,(ix+05h) SOUT0: E045: ld a,(hl) inc hl cp 04h jr z,SOUTEND ;l065a ; (+0fh) push af ld c,e SOUT1: l064d: in a,(c) bit 1,a jr z,SOUT1 ;l064d ; (-06h) pop af ld c,d out (c),a jp SOUT0 ;E045 ;le045 SOUTEND: E05A: l065a: xor a jr ASCEND ;l05dd ; (-80h) ;************************************************************************* ;************************************************************************* ;******************FDC**************************************************** ;************************************************************************* FDC: E05D: jp FDC0 ;le064 E060: DEFW FDC E062: ;; DEFW 270H ;ENDFDC-FDC DEFW ENDFDC-FDC ;;TESTFDC: EQU ENDFDC-FDC ;; ld e,l ;; ret po ;; ld (hl),b ;; ld (bc),a FDC0: le064: E064: push af push bc push de push hl push ix push iy ld iy,INTREG ;0df15h ld a,(ix+02h) cp 00h jr z,FINIT ;l068a ; (+13h) cp 01h jr z,FREAD ;l068f ; (+14h) cp 02h jr z,FWRITE ;l0694 ; (+15h) cp 03h jr z,FFORMAT ;l0699 ; (+16h) ld (ix+01h),01h scf jr FDCEND ;l069e ; (+14h) FINIT: l068a: call INIT ;E0AD ;le0ad jr l069e ; (+0fh) FREAD: l068f: call CREAD ;E0CD ;le0cd jr FDCEND ;l069e ; (+0ah) FWRITE: l0694: call CWRITE ;E12B ;le12b jr FDCEND ;l069e ; (+05h) FFORMAT: l0699: call CFORMAT ;E191 ;le191 jr FDCEND ;l069e ; (+00h) FDCEND: l069e: pop iy pop ix pop hl pop de pop bc jr c,FDCERREND ;l06aa ; (+03h) pop af and a ret ;************************************************************************* ;************************************************************************* ;************************************************************************* FDCERREND: E0AA: l06aa: pop af scf ret ;************************************************************************* INIT: E0AD: ld a,0ffh ld (iy+05h),a ld (iy+06h),a ld (iy+00h),a ld (iy+02h),a ld (iy+03h),a ld (iy+01h),a ld (iy+04h),00h ld (ix+04h),00h call SDRV ;E1C1 ;le1c1 ret ;************************************************************************* CREAD: E0CD: call TADJ ;E197 ;le197 ld a,RDCD ;03h call OSYNC ;le27a ret c E0D6: ld de,T1 ;1000h CREAD0: l06d9: call IBYT ;le2b2 jr nc,CREAD1 ;l06e9 ; (+0bh) dec de ld a,e or d jr nz,CREAD0 ;l06d9 ; (-0ah) ld (ix+01h),02h scf ret ;************************************************************************* CREAD1: l06e9: ld (ix+01h),a and a jr z,CREAD2 ;l06f1 ; (+02h) scf ret ;************************************************************************* CREAD2: l06f1: ld bc,TMOUT ;0ffffh CREAD3: l06f4: in a,(IFC+STATF) ; Port 44h and 01h jr nz,CREAD4 ;l0705 ; (+0bh) dec bc ld a,c or b jr nz,CREAD3 ;l06f4 ; (-0bh) ld (ix+01h),02h scf ret ;************************************************************************* CREAD4: l0705: ld l,(ix+08h) ld h,(ix+09h) ld e,(ix+0dh) inc e ld c,IFC+INDAT ;40h ; Port 40h in0 a,(DCNTL) ; Z180 instruction push af ld a,0a0h out0 (DCNTL),a ; Z180 instruction 0f2h CREAD5: l071a: ld b,128 ;80h inir dec e jr nz,CREAD5 ;l071a ; (-07h) pop af out0 (DCNTL),a ; Z180 instruction and a ld (iy+04h),0ffh ret ;************************************************************************* CWRITE: E12B: call TADJ ;E197 ;le197 ld a,WRCD ;04h call OSYNC ;e27a OUTPUT CONTROLLER ret c ld de,T1 ;1000h CWRITE0: l0737: call IBYT ;le2b2 jr nc,CWRITE1 ;l0747 ; (+0bh) dec de ld a,e or d jr nz,CWRITE0 ;l0737 ; (-0ah) ld (ix+01h),02h scf ret ;************************************************************************* CWRITE1: l0747: ld (ix+01h),a and a jr z,CWRITE2 ;l074f ; (+02h) scf ret ;************************************************************************* CWRITE2: l074f: ld l,(ix+08h) ld h,(ix+09h) ld e,(ix+0dh) inc e ld c,IFC+OUDAT ;42h ; Port 42h in0 a,(DCNTL) ; Z180 instruction push af ld a,0a0h out0 (DCNTL),a ; Z180 instruction CWRITE3: l0764: ld b,128 ;80h push bc call WRSTAT ;le17d pop bc outi push bc call WRSTAT ;le17d pop bc otir dec e jr nz,CWRITE3 ;l0764 ; (-13h) pop af out0 (DCNTL),a ; Z180 instruction and a ret ;************************************************************************* WRSTAT: le17d: E17D: ld bc,TMOUT ;0ffffh WRSTAL: l0780: in a,(IFC+STATF) ; Port 44h and 02h ret nz dec bc ld a,c or b jr nz,WRSTAL ;l0780 ; (-0ah) ld (ix+01h),02h pop af scf ret ;************************************************************************* CFORMAT: E191: ld (ix+01h),01h scf ret ;************************************************************************* TADJ: E197: ld a,(iy+00h) cp (ix+03h) call nz,SDRV ;le1c1 ret c ld a,(iy+02h) cp (ix+05h) call nz,STRK ;le231 ret c ld a,(ix+06h) ld b,(ix+04h) inc b jp TADJ1 ;le1b8 TADJ0: l07b5: add a,(ix+0ch) TADJ1: le1b8: E1B8: djnz TADJ0 ;l07b5 ; (-05h) E1BA: cp (iy+03h) call nz,SSEC ;le255 ret ;************************************************************************* SDRV: le1c1: E1C1: ld (iy+00h),0ffh ld (iy+04h),00h ld a,00h call OSYNC ;le27a ret c ld de,l0000 ld b,(ix+03h) inc b scf SDRV0: l07d7: rl e djnz SDRV0 ;l07d7 ; (-04h) ld a,(ix+0fh) rrc a rrc a or e ld e,a ld a,(ix+0eh) and (hl) and 0fh jr z,SDRV2 ;l07ee ; (+02h) set 4,e SDRV2: l07ee: ld d,(ix+0ch) ld a,(ix+0eh) and 0f0h ld a,00h jr nz,SDRV3 ;l07fc ; (+02h) ld a,06h SDRV3: l07fc: add a,(ix+0dh) and 03h rrc a rrc a or d ld d,a ld a,e call OBYT ;le294 ret c ld a,d call OBYT ;le294 ret c call IBYT ;le2b2 ret c ld (ix+01h),a and a jr z,SDRV4 ;l081d ; (+02h) scf ret ;************************************************************************* SDRV4: l081d: ld a,(ix+03h) ld (iy+00h),a ld a,(ix+04h) ld (iy+01h),a call STRK ;le231 ret c call SSEC ;le255 ret ;************************************************************************* STRK: le231: E231: ld (iy+02h),0ffh ld (iy+04h),00h ld a,01h call OSYNC ;le27a ret c ld a,(ix+05h) call OBYT ;le294 ret c ld a,(ix+05h) ld (iy+02h),a ld (ix+01h),00h and a call SSEC ;le255 ret ;************************************************************************* SSEC: le255: E255: ld (iy+03h),0ffh ld (iy+04h),00h ld a,02h call OSYNC ;le27a ret c ld a,(ix+06h) ld b,(ix+04h) inc b jr SSEC1 ;l086f ; (+03h) SSEC0: l086c: add a,(ix+0ch) SSEC1: l086f: djnz SSEC0 ;l086c ; (-05h) ld (iy+03h),a call OBYT ;le294 ret c and a ret ;************************************************************************* OSYNC: le27a: E27A: ld e,a in a,(IFC+INDAT) ld a,60h ; 1. SYNCHRONISTATIONS-BYTE call OBYT ;le294 ret c ld a,00h call OBYT ;le294 ret c ld a,09h call OBYT ;le294 ret c ld a,e call OBYT ;le294 ret ;************************************************************************* OBYT: le294: E294: push bc push af ld bc,TMOUT ;0ffffh OBYT0: l0899: in a,(IFC+STATF) ; Port 44h and 02h jr nz,OBYT1 ;l08ac ; (+0dh) dec bc ld a,b or c jr nz,OBYT0 ;l0899 ; (-0bh) ld (ix+01h),02h pop af pop bc scf ret ;************************************************************************* OBYT1: l08ac: pop af pop bc out (IFC+OUDAT),a ; Port 42h and a ret ;************************************************************************* IBYT: le2b2: E2B2: push bc ld bc,TMOUT ;0ffffh IBYT0: l08b6: in a,(IFC+STATF) ; Port 44h STATF statt STAT and 01h jr nz,IBYT1 ;l08c8 ; (+0ch) dec bc ld a,b or c jr nz,IBYT0 ;l08b6 ; (-0bh) ld (ix+01h),02h pop bc scf ret ;************************************************************************* IBYT1: l08c8: pop bc in a,(IFC+INDAT) ; Port 40h and a ret ENDFDC: ;************************************************************************* TRSC: E2CD: ld de,l0000 and a ret z push bc pop hl dec hl push af ld b,a TRSC0: l08d7: srl h rr l rr d rr e djnz TRSC0 ;l08d7 ; (-0ah) inc hl pop af push hl ld b,a TRSC1: l08e5: and a rl d rl e djnz TRSC1 ;l08e5 ; (-07h) push de pop bc ld de,128 ;80H ;l0080 ld hl,l0000 TRSC2: le2f4: E2F4: ld a,c or b E2F6: jp z,TRSC3 ;le2fe E2F9: add hl,de dec bc jp TRSC2 ;le2f4 ;************************************************************************* TRSC3: le2fe: E2FE: push hl pop de E300: pop bc ret ;************************************************************************* ;; setbase 0E302H ;TRTR: ; TITLE"TRSCTR:TRTR " ;************************************************************************* ;* *UP* ;* SUBROUTINE: TRTR (TRANSLATE TRACK) * ;* INPUT: BC - BDOS-TRACK * ;* DE - NUMBER OF TRACKS PER SIDE * ;* OUTPUT: BC - PHYSICAL TYRACK * ;* A - PHYSICAL HEAD / SIDE * ;* CHANGE: AF,BC,HL * ;* USE: - * ;* CALLS: - * ;* STACK: 2 BYTE * ;* DESCR.: ;* TRTR setzt die BDOS-Tracknummer in eine physikalische Tracknummer und ;* die zugehoerige Seiteninformation bei doppelseitigen Disketten bzw. ;* Mehrfachkopflaufwerken. ;* Es gilt: * ;* * ;* HD = INT(BT/NT)-1 * ;* PT = BT MOD NT * ;* mit * ;* BT: BDOS-Track * ;* NT: Anzahl Tracks pro Seite / KOPF * ;* PT: physikalische Tracknummer * ;* HD: Seite / Kopf * ;* * ;* Grundlage ist die Annahme, dass die Tracknummern auf Seite 0 mit 0 beginnen und * ;* auf jeder weiteren Seite von BDOS forlaufend gezaehlt werden, physikalisch jedoch * ;* wieder bei 0 beginnen. * ;* * ;* * ;******************************************************************************************************* ;* * ;* C: JIRSA * ;* ORG: 151287 => 1.00 * ;* REV: => * ;* * ;******************************************************************************************************* ; CSEG ; PUBLIC TRTR TRTR: E302: ;BEGIN LD A,C ;IF BT=0 OR B ;THEN PT:=BT, HD:=0 END RET Z ; ;ELSE PUSH BC ;BT NACH HL POP HL ; XOR A ;HD:=0 TRTR0: ;WHILE BT >0 DO BEGIN SBC HL,DE ;BT:=BT-NT INC A ;HD:=HD+1 ;END JP NC,TRTR0 ;REPEAT ADD HL,DE ;BT:=BT+NT (korrektur) DEC A ;HD:=HD-1 (korrektur) PUSH HL ;PT:=BT POP BC ; ;END RET ;END NDRV: E313: DEFB 02H ; ANZAHL DER LAUFWERKE SECBUF: DEFS 256 ; SEKTOR ZWEISCHEN-PUFFER DIRBUF: DEFS 128 ; VERZEICHNIS-PUFFER E494: ;; setbase 0E494H DPH: ; DRIVE 0 **************************************************************** ;************************************************************************* DPH0: defw 0 defs 6 defw dirbuf defw dpb0 defw csv0 defw alv0 csv0: defs 32 ; CSV alv0: defs 39 ; ALV dpb0: defw 32 ; SPT NUMBER OF 128-BYTE SECTORS PER TRACK defb 4 ; BSH defb 15 ; BLM defb 0 ; EXTENT-MASK defw 271 ; DSM defw 128 ; DRM defb 192 ; AL0 defb 0 ; AL1 defw 32 ; CKS defw 4 ; OFF cbl0: defb 0 ; BSY defb 0 ; STA defb 0 ; FCT defb 0 ; DRV defb 0 ; HD defb 0 ; TRK defb 1 ; SEC defb 0 ; RES defw secbuf ; DMA SECTOR-BUFFER defb 2 ; NHD NUMBER OF HEADS defb 70 ; NTRK NUMBER OF TRACKS PER HEAD defb 16 ; NSED NUMBER OF SECTORS PER TRACK AND HEAD defb 001h ; NBYT NUMBER OF BYTES PER SECTOR (CODED) defb 000h ; DNTP DENSITY / TYP defb 000h ; SRAT STEPRATE ; DRIVE 0 **************************************************************** ;************************************************************************* DPH1: defw 0 defs 6 defw dirbuf defw dpb1 defw csv1 defw alv1 csv1: defs 32 alv1: defs 39 dpb1: defw 32 defb 4 defb 15 defb 0 defw 271 defw 128 defb 192 defb 0 defw 32 defw 4 cbl1: defb 0 defb 0 defb 0 defb 0 defb 0 defb 0 defb 1 defb 0 defw secbuf defb 2 defb 70 defb 16 defb 001h defb 000h defb 000h ;************************************************************************* ;************************************************************************* E580: ; TITLE" A1H4" ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;X *UP* ;X ROUTINE: A1H4 ;X EINGANG: A - ASCII-ZEICHEN ;X AUSGANG: A - 4 BIT HEXZAHL ;X CALLS: - ;X REG.: AF ;X STACK: - ;X RAM: - ;X BESCHR.: ;X A1H4 wandelt ein ASCII-Zeichen im Akku in eine Hexzahl um ;X Der Wertebereich fuer die ASCII-Zeichen erstreckt sich von "0"...."9" bzw. ;X von "A"..."F". Sollte das Programm ein ASCII-Zeichen ausserhalb dieses Bereiches ;X im Akku vorfinden, so kehrt es mit CY=1 als Fehlerkennung in das aufrufende ;X Programm zurueck. ;X ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ; PUBLIC A1H4 ; CSEG ;; setbase 0E580H A1H4: CP '0' ;IF A<'0' THEN FEHLER RET C ; ;ELSE CP 'F'+1 ;IF A<='F' THEN WEITER JP C,A1H41 ; ;ELSE SCF ;CY:=1 RET ;FEHLER ,RETURN A1H41: SUB '0' ;A:=A-'0' CP 0AH ;IF A>9 THEN WEITER BEI ASCHEX2 JP NC,A1H42 ; ;ELSE AND A ;CY:=0 RET ;RETURN A1H42: SUB 07H ;A:=A-07H RET ;RETURN ;TITLE": H4A1" ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;X *UP* ;X ROUTINE: H4A1 ;X EINGANG: A - 4BIT HEXZAHL (UNTEREN 4 BIT VON A) ;X AUSGANG: A - ASCII-ZEICHEN ;X CALLS: - ;X REG.: AF ;X STACK: - ;X RAM: - ;X BESCHR.: ;X H4A1 wandelt eine Hexzahl, die in den unteren 4 Bit des Akku steht in ;X ein ASCII-Zeichen um. Die oberen 4 Bit im Akku werden zerstoert. ;X ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ; PUBLIC H4A1 ; CSEG ;; setbase 0E596H H4A1: AND 0FH ;OBEREN 4 BIT AUSBLENDEN ADD A,90H ;UMWANDELN DAA ; ADC A,40H ; DAA ; RET ; E59F: ;TITLE": A2H8" ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;X *UP* ;X ROUTINE: A2H8 ;X EINGANG: DE - 2 ASCII-ZEICHEN, WOBEI IN E DAS NIEDERWERTIGE ZEICHEN STEHT ;X AUSGANG: A - 8BIT HEXWERT ;X CALLS: A1H4 ;X REG.: AF,DE ;X STACK: - ;X RAM: - ;X BESCHR.: ;X A2H8 wandelt 2 ASCII-Zeichen in eine 8Bit-Hexzahl um, wobei das Zeichen in ;X E den unteren 4 Bit und das Zeichen in D den oberen 4 Bit im Akku entspricht. ;X Der Wertebereich der ASCII-Zeichen erstrekt sich von "0"..."9" bzw. ;X von "A"..."F". Sollte das Programm Zeichen ausserhalb des Wertebereichs vorfinden, ;X so kehrt es mit CY=1 in das aufrufende Programm zurueck. ;X ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ; PUBLIC A2H8 ; CSEG A2H8: LD A,E ;LSĀ LADEN CALL A1H4 ;UMWANDELN ;;;; RET C ;IF FEHLER THEN RETURN ;ELSE LD E,A ;SAVE LD A,D ;MSB LADEN CALL A1H4 ;UMWANDELN RET C ;IF FEHLER THEN RETURN ;ELSE RRCA ;IN OBERE 4 BIT DES AKKU SCHIEBEN RRCA ; RRCA ; RRCA ; OR E ;MIT UNTEREN 4 BIT VERKNUEPFEN RET ;RETURN E5B0: ;; setbase 0E5B0H ;H8A2: ; TITLE": H8A2" ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;X *UP* ;X ROUTINE: H8A2 ;X EINGANG: A - 8BIT HEXZAHL ;X AUSGANG: DE - 2 ASCII-ZEICHEN, WOBEI DAS ZEICHEN IN E DEN UNTEREN ;X 4 BIT DES AKKU ENTSPRICHT ;X CALLS: H4A1 ;X REG.: AF,DE ;X STACK: - ;X RAM: - ;X BESCHR.: ;X HEX8ASC4 wandelt eine 8Bit-Hexzahl in zwei ASCII-Zeichen um. ;X Die unteren 4 Bit des Akku entsprechen dem ASCII-Zeichen in E, die ;X oberen 4 Bit im Akku entsprechen dem ASCII-Zeichen in D. ;X ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ; PUBLIC H8A2 ; CSEG H8A2: LD D,A ;SAVE CALL H4A1 ;UNTERE 4 BIT UMWANDELN LD E,A ;SAVE LD A,D ;RECALL WERT RRCA ;IN POSITION 0-3 SCHIEBEN RRCA ; RRCA ; RRCA ; CALL H4A1 ;UMWANDELN LD D,A ;ABLEGEN RET ;RETURN E5BF: TESTFDC: EQU ENDFDC-FDC BIOSLANG: EQU E5BF-BIOS ; 0BBFH hex. 3007 dez. CBIOS: EQU BIOS+2560 ; 0E400 hex. end