|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2242 (0x8c2) Types: TextFile Names: »TDMA.S«
└─⟦f2a3f19b6⟧ Bits:30005203 8" Zilog MCZ/1 Floppy CR80FD_0030 ( BB LTU TEST BACK UP! BB VD1 821220 ) └─ ⟦this⟧ »TDMA.S«
*INCLUDE CONST.S GLOBAL TDMA EXTERNAL DETECT TDMA IN A,(APIO1+2) SET 6,A ;DISABLE DMA - SIO2 TRANSFER OUT (APIO1+2),A LD C,ADMA LD HL,SRAMB+100H CALL T1DMA ;DO DMA TEST AND A ;IF NO ERROR THEN RET Z ; RETURN ;ELSE ADD A,80H ; LOAD ERROR CODE CALL DETECT ; DETECT ERROR OCCURENCE RET ;FI ;---------------------------------------------------------------------------- T1DMA PUSH BC ;DMAADR PUSH HL ;MEADR LD IX,0 ADD IX,SP LD A,0DH ADD A,(IX+2) LD C,A OUT (C),A ;RESET DMA LD B,10H D0LOOP DJNZ D0LOOP ;DELAY FOR DMA RESET LD A,8 D1LOOP SRL A ;FOR CHANNEL 3 TO 0 LD (IX+3),A ADD A,(IX+2) LD C,A LD E,1 LD B,8 D11LOOP LD A,E ; FOR BIT 0 TO 7 OUT (C),A ; RUNNING 1 AT LOW ADDRESS CPL OUT (C),A ; RUNNING 0 AT HIGH ADDRESS IN L,(C) IN H,(C) XOR H JP NZ,D1ERROR ; QUIT IF I/O ERROR LD A,E XOR L JP NZ,D1ERROR ; QUIT IF I/O ERROR RLC E DJNZ D11LOOP ; NEXT BIT LD A,(IX+3) AND A JR NZ,D1LOOP ;NEXT CHANNEL POP HL ;MEADR PUSH HL LD DE,10H ;SET NO. OF BYTE TO TRANSFER OUT (C),L OUT (C),H ;SET TRANSFER READ ADDRESS INC C OUT (C),E OUT (C),D INC C XOR A LD B,E D2LOOP LD (HL),A ;RESET MEMORY FOR DMA TRANSFER INC HL INC A DJNZ D2LOOP LD A,0FFH LD B,E D3LOOP LD (HL),A INC HL DJNZ D3LOOP DEC HL OUT (C),L ;SET WRITE TRANSFER ADDRESS OUT (C),H INC C OUT (C),E OUT (C),D LD D,(IX+2) ;LOAD DMA ADDRESS LD A,0BH ADD A,D LD C,A LD A,10001000B ;SET CHA 0 MODE: READ TRANSFER ; AUTO INCREMENT OUT (C),A LD A,10100101B ;SET CHA 1 MODE: WRITE TRANSFER ; AUTO DECREMENT OUT (C),A LD A,8 ADD A,D LD C,A LD A,00011001B ;SET COMMAND: MEMORY-TO-MEMORY ; CONTROLLER ENABLED ; COMPRESSED TIMING ; ROTARY PRIORITY OUT (C),A LD A,0FH ADD A,D LD C,A LD A,0CH OUT (C),A LD A,9 ADD A,D LD C,A LD A,4 OUT (C),A ;ACTIVATE TRANSFER POP HL ;MEADR PUSH HL LD DE,1FH ADD HL,DE LD A,0 LD B,0FH D4LOOP CP (HL) ;TEST THE TRANSFERRED DATA JR NZ,D2ERROR ;QUIT IF DATA ERROR INC A DEC HL DJNZ D4LOOP LD A,0FH CP (HL) JR NZ,D2ERROR ;QUIT IF LAST READ TRANSFER BYTE CHANGED XOR A JR DEXIT D1ERROR LD A,1 ;SET I/O ERROR JR DEXIT D2ERROR LD A,2 DEXIT POP HL ;ADJUST STACK POINTER POP HL RET ;ECHO \f