Browse Source

Merge pull request #243 from b1ackmai1er/dev

Add ability to Transfer a file to memory by x-modem
pull/246/head
Wayne Warthen 4 years ago
committed by GitHub
parent
commit
ed08e5a9bd
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/HBIOS/cfg_dyno.asm
  2. 2
      Source/HBIOS/cfg_ezz80.asm
  3. 2
      Source/HBIOS/cfg_master.asm
  4. 2
      Source/HBIOS/cfg_mbc.asm
  5. 2
      Source/HBIOS/cfg_mk4.asm
  6. 2
      Source/HBIOS/cfg_n8.asm
  7. 2
      Source/HBIOS/cfg_rcz180.asm
  8. 2
      Source/HBIOS/cfg_rcz280.asm
  9. 2
      Source/HBIOS/cfg_rcz80.asm
  10. 2
      Source/HBIOS/cfg_sbc.asm
  11. 2
      Source/HBIOS/cfg_scz180.asm
  12. 2
      Source/HBIOS/cfg_zeta.asm
  13. 2
      Source/HBIOS/cfg_zeta2.asm
  14. 208
      Source/HBIOS/dbgmon.asm
  15. 49
      Source/HBIOS/dma.asm
  16. 1
      Source/HBIOS/std.asm
  17. 2
      Source/HBIOS/uf.asm

2
Source/HBIOS/cfg_dyno.asm

@ -193,4 +193,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_ezz80.asm

@ -228,4 +228,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_master.asm

@ -300,4 +300,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_mbc.asm

@ -232,4 +232,4 @@ SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_mk4.asm

@ -233,4 +233,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_n8.asm

@ -231,4 +231,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_rcz180.asm

@ -241,4 +241,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_rcz280.asm

@ -257,4 +257,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_rcz80.asm

@ -246,4 +246,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_sbc.asm

@ -232,4 +232,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_scz180.asm

@ -236,4 +236,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_zeta.asm

@ -168,4 +168,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

2
Source/HBIOS/cfg_zeta2.asm

@ -180,4 +180,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM)
;
DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM)
DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC)
DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC)

208
Source/HBIOS/dbgmon.asm

@ -33,6 +33,9 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH
;
#IF DSKYENABLE
#DEFINE USEDELAY
ENA_XM .SET FALSE ; NO ROOM FOR BOTH DSKY+XMODEM
#ELSE
ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE
#ENDIF
;
#INCLUDE "util.asm"
@ -65,6 +68,7 @@ UART_ENTRY:
; P XXXX - PROGRAM RAM STARTING AT XXXX, PROMPT FOR VALUES
; R XXXX - RUN A PROGRAM AT ADDRESS XXXX
; S XX - SET ACTIVE BANK TO XX
; T xxxx - X-MODEM TRANSFER TO MEMORY LOCATION XXXX
; X - EXIT MONITOR
;
;__COMMAND_PARSE______________________________________________________________
@ -99,6 +103,10 @@ SERIALCMDLOOP:
JP Z,PROGRM ; IF YES GO PROGRAM ROUTINE
CP 'O' ; IS IT AN "O" (Y/N)
JP Z,POUT ; PORT OUTPUT
#IF (ENA_XM)
CP 'T' ; IS IT A "T" (Y/N)
JP Z,XMLOAD ; XMODEM TRANSFER
#ENDIF
CP 'L' ; IS IT A "L" (Y/N)
JP Z,HXLOAD ; INTEL HEX FORMAT LOAD DATA
CP 'I' ; IS IT AN "I" (Y/N)
@ -317,6 +325,183 @@ KLOP1:
CALL COUT ; OUTPUT KEY TO SCREEN
JR KLOP1 ; LOOP
;
#IF (ENA_XM)
;
;__XMLOAD_____________________________________________________________________
;
; LOAD A FILE INTO MEMORY FROM THE SERIAL PORT USING X-MODEM PROTOCOL
;
SOH: .EQU 'A'-40h ; ^A CTRL-A
EOT: .EQU 'D'-40h ; ^D = End of Transmission
ACK: .EQU 'F'-40h ; ^F = Positive Acknowledgement
NAK: .EQU 'U'-40h ; ^U = Negative Acknowledgement
CAN: .EQU 'X'-40h ; ^X = Cancel
;
CPKTN .DB 0 ; CALCULATED PACKET NUMBER
CPKTN1C .DB 0 ; CALCULATED PACKET NUMBER COMPLEMENT
RETRYC .DB 0 ; RETRY COUNT
RPKTN: .DB 0 ; RECEIVED PACKET NUMBER
RPKTN1C:.DB 0 ; RECEIVED PACKET NUMBER COMPLEMENT
PKTCS .DB 0 ; CHECKSUM
;
PSADDR: .DW 0 ; START OF PACKET ADDR
;
XMLOAD: CALL WORDPARM ; GET STARTING LOCATION
JP C,ERR ; HANDLE SYNTAX ERRORS
PUSH DE ; SAVE VALUE
CALL NONBLANK ; LOOK FOR EXTRANEOUS PARAMETERS
CP 0 ; TEST FOR TERMINATING NULL
JP NZ,ERR ; ERROR IF NOT TERMINATING NULL
;
LD HL,TXT_READY ; READY FOR
CALL PRTSTR ; TRANSFER
CALL NEWLINE
;
LD BC,$F8F0 ; GET CPU SPEED
RST 08 ; AND MULTIPLY
LD A,L ; BY 4
PUSH AF
ADD A,A ; TO CREATE
ADD A,A ; TIMEOUT DELAY
LD (TMOFCT),A ; FACTOR
POP AF
;
LD BC,$FE01 ; SET FIRST NUMBER TO 1
LD (CPKTN),BC ; ALSO STORE THE 1-COMPLEMENT
;
POP DE ; POINT TO WHERE TO SAVE THE PACKET
LD (PSADDR),DE ; SAVE IF FOR THE CHECKSUM CALCULATION
;
GETNP: LD HL,RETRYC ; WE RETRY 20 TIMES BEFORE GIVING UP
LD (HL),20
;
NPLOOP: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
CALL GCTO
JP NC,NOTOUT ; NO TIMEOUT ?
;
DEC (HL) ; REACHED MAX NUMBER OF RETRIES?
JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT
;
LD A,NAK ; SEND A NAK TO THE UPLOADER
CALL COUT
JR NPLOOP ; LOOP UNTIL WE GET A GET A CHARACTOR OR TIMEOUT
;
NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED?
JP Z,XMDONE ; YES, THEN WE'RE DONE
CP CAN ; UPLOADER WANTS TO FAIL TRANSFER?
JP Z,FAILCN ; YES, THEN WE'RE ALSO DONE
CP SOH ; DID WE GET A START-OF-NEW-PACKET?
JR NZ,NPLOOP ; NO, GO BACK AND TRY AGAIN
;
LD HL,RPKTN ; WE SAVE PACKET NUMBER HERE
;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL
JR C,FAILTO ; TIMOUT ERROR?
;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER COMPLEMENT
JR C,FAILTO ; TIMOUT ERROR?
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET
PCKRCV: CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
JR C,FAILTO ; TIMOUT ERROR?
LD (DE),A ; SAVE THE RECEIVED CHAR
INC DE
DEC C
JP NZ,PCKRCV
;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
JR C,FAILTO ; TIMOUT ERROR?
LD (PKTCS),A ; SHOULD BE CHECKSUM
;
LD HL,(PSADDR) ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128
XOR A
CSLOOP: ADD A,(HL) ; JUST ADD UP THE BYTES
INC HL
DJNZ CSLOOP
;
LD (PSADDR),DE ; SAVE THE NEW PACKET START ADDRESS
;
LD HL,PKTCS
XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO
JR NZ,FAILCS ; BY XORING IT TO OUR SUM WE CHECK FOR EQUALITY
;
LD HL,(CPKTN) ; CHECK
LD BC,(RPKTN) ; AGREEMENT
; XOR A ; PACKET
SBC HL,BC ; NUMBERS
JR NZ,FAILPN
;
LD HL,CPKTN ; UPDATE THE PACKET COUNTERS
INC (HL)
INC HL
DEC (HL)
;
LD A,ACK ; TELL UPLOADER THAT WE'RE HAPPY WITH WITH
CALL COUT ; PACKET AND GO BACK AND FETCH SOME MORE
JP GETNP
;
FAILRT: LD HL,TXT_RETRYERR ; FAILED ON RETRY
JR XMERR
FAILCN: LD HL,TXT_CANCLERR ; TRANSFER CANCELLED
JR XMERR
FAILCS: LD HL,TXT_CKSUMERR ; CHECKSUM ERROR
JR XMERR
FAILPN: LD HL,TXT_PKNUMERR ; PACKET NUMBER ERROR
JR XMERR
FAILTO: LD HL,TXT_TMOUTERR ; TIMEOUT ERROR
JR XMERR
;
XMDONE: LD A,ACK ; TELL REMOTE
CALL COUT ; WE'RE DONE
LD HL,TXT_LOADED ; TELL USER
XMERR: CALL PRTSTR ; WE'RE DONE
JP SERIALCMDLOOP ; BACK TO MENU
;
; WAITS FOR UP TO B SECONDS FOR A CHARACTER TO BECOME AVAILABLE AND
; RETURNS IT IN A WITHOUT ECHO AND CARRY CLEAR. IF TIMEOUT THEN CARRY
; IT SET.
;
; 4MHZ 20 SECONDS TMOFCT = 16
; 10MHZ 20 SECONDS TMOFCT = 39
;
GCTO1: LD B,1 ; WAIT 1 SECOND FOR SERIAL INPUT
GCTO: CALL CST ; IF THERE IS A
OR A ; CHARACTER AVAILABLE
JR NZ,GETCHRX ; EXIT NOW OTHERWISE POLL
GCTOA: PUSH BC
LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP
TMOFCT: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START
GCTOB: PUSH BC
LD B,C
GCTOC: PUSH BC
CALL CST
OR A ; A CHAR AVAILABLE?
JR NZ,GETCHR ; YES, GET OUT OF LOOP
POP BC
DJNZ GCTOC
POP BC
DJNZ GCTOB
POP BC
DJNZ GCTO
SCF ; SET CARRY SIGNALS
RET ; TIMEOUT OCCURRED
GETCHR: POP BC
POP BC
POP BC
GETCHRX:CALL CIN ; GET THE CHARACTER
OR A ; CLEAR CARRY
RET ; SIGNALS SUCCESS
TXT_PKNUMERR .TEXT "\r\nPacket Number Error$"
TXT_TMOUTERR .TEXT "\r\nTimeout Error$"
TXT_RETRYERR .TEXT "\r\nRetry Error$"
TXT_CANCLERR .TEXT "\r\nTransfer Cancelled$"
#ENDIF
;
;__HXLOAD_____________________________________________________________________
;
; LOAD INTEL HEX FORMAT FILE FROM THE SERIAL PORT, USER OPTION "H"
@ -426,7 +611,8 @@ PIN:
;__DUMPMEM____________________________________________________________________
;
; PRINT A MEMORY DUMP, USER OPTION "D"
; SYNTAX: D <START ADR> <END ADR>
; SYNTAX: D <START ADR> [END ADR]
; IF NO END ADDRESS, DUMP 100H BYTES
;_____________________________________________________________________________
;
DUMPMEM:
@ -434,12 +620,14 @@ DUMPMEM:
JP C,ERR ; HANDLE ERRORS
PUSH DE ; SAVE IT
CALL WORDPARM ; GET END ADDRESS
JP C,ERR ; HANDLE ERRORS
PUSH DE ; SAVE IT
POP DE ; DE := END ADDRESS
POP HL ; HL := START ADDRESS
POP HL ; RECOVER START
JR NC,GDATA ;
;
LD D,H ; DEFAULT TO 100H
LD E,L ; BYTES IF NO
INC D ; END ADDRESS
DEC DE ; IS GIVEN
;
GDATA:
INC DE ; BUMP DE FOR LATER COMPARE
CALL NEWLINE ;
@ -1006,7 +1194,7 @@ TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$"
TXT_MINIHELP .TEXT " (? for Help)$"
TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
.TEXT "\r\nB - Boot system"
.TEXT "\r\nD xxxx yyyy - Dump memory from xxxx to yyyy"
.TEXT "\r\nD xxxx [yyyy] - Dump memory from xxxx to yyyy"
.TEXT "\r\nF xxxx yyyy zz - Fill memory from xxxx to yyyy with zz"
.TEXT "\r\nH - Halt system"
.TEXT "\r\nI xxxx - Input from port xxxx"
@ -1018,6 +1206,9 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
.TEXT "\r\nR xxxx [[yy] [zzzz]] - Run code at address xxxx"
.TEXT "\r\n Pass yy and zzzz to register A and BC"
.TEXT "\r\nS xx - Set bank to xx"
#IF (ENA_XM)
.TEXT "\r\nT xxxx - X-modem transfer to memory location xxxx"
#ENDIF
.TEXT "\r\nX - Exit monitor"
.TEXT "$"
;
@ -1592,6 +1783,7 @@ DSKY_ENTRY:
#ENDIF
;
;
.FILL 16,0 ; SET MINIMUM STACK DEPTH
SLACK .EQU (MON_END - $)
.FILL SLACK,00H
;

49
Source/HBIOS/dma.asm

@ -1,11 +1,7 @@
;==================================================================================================
; Z80 DMA DRIVER FOR ECB-DMA
; Z80 DMA DRIVER
;==================================================================================================
;
; DUE TO LOW CLOCK SPEED CONTRAINTS OF Z80 DMA CHIP, THE HALF CLOCK FACILITY
; IS USED DURING DMA PROGRAMMING AND CONTINUOUS BLOCK TRANSFERS.
; TESTING CONDUCTED ON A SBC-V2-005 @ 10Mhz
;
DMA_CONTINUOUS .equ %10111101 ; + Pulse
DMA_BYTE .equ %10011101 ; + Pulse
DMA_BURST .equ %11011101 ; + Pulse
@ -26,7 +22,19 @@ DMA_RESET .equ $c3
;DMA_ENABLE_AFTER_RETI .equ $b7
;DMA_REINIT_STATUS_BYTE .equ $8b
;
DMA_FBACK .equ TRUE
DMA_FBACK .equ TRUE ; ALLOW FALLBACK TO SOFTWARE
DMA_USEHS .equ TRUE ; USE CLOCK DIVIDER
;
#IF (DMAMODE=DMAMODE_MBC)
DMA_RDY .EQU %00000000
DMA_FORCE .EQU 1
;DMA_USEHS .SET FALSE
#ENDIF
#IF (DMAMODE=DMAMODE_ECB)
DMA_RDY .EQU %00001000
DMA_FORCE .EQU 0
DMA_USEHS .SET TRUE
#ENDIF
;
;==================================================================================================
; DMA INITIALIZATION CODE
@ -38,12 +46,14 @@ DMA_INIT:
LD A, DMABASE
CALL PRTHEXBYTE
;
xor a
LD A,DMA_FORCE
out (DMABASE+1),a ; force ready off
;
#IF (DMA_USEHS)
ld a,(HB_RTCVAL)
or %00001000 ; half
out (RTCIO),a ; clock
#ENDIF
;
call DMAProbe ; do we have a dma?
jr nz,DMA_NOTFOUND
@ -58,11 +68,13 @@ DMA_INIT:
xor a ; set status
;
DMA_EXIT:
#IF (DMA_USEHS)
push af
ld a,(HB_RTCVAL)
and %11110111 ; full
out (RTCIO),a ; clock
pop af
#ENDIF
ret
;
DMA_NOTFOUND:
@ -132,7 +144,7 @@ DMACode ;.db DMA_DISABLE ; R6-Command Disable DMA
.dw 0 ; R4-Port B, Destination address
.db %00001100 ; R4-Pulse byte follows, Pulse generated
.db 0 ; R4-Pulse offset
.db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH
.db %10010010+DMA_RDY; R5-Stop on end of block, ce/wait multiplexed, READY active config
.db DMA_LOAD ; R6-Command Load
; .db DMA_FORCE_READY ; R6-Command Force ready
; .db DMA_ENABLE ; R6-Command Enable DMA
@ -151,9 +163,11 @@ DMALDIR:
ld b,DMACopy_Len ; dma command
ld c,DMABASE ; block
;
#IF (DMA_USEHS)
ld a,(HB_RTCVAL)
or %00001000 ; half
out (RTCIO),a ; clock
#ENDIF
di
otir ; load and execute dma
ei
@ -163,12 +177,13 @@ DMALDIR:
in a,(DMABASE) ; set non-zero
and %00111011 ; if failed
sub %00011011
#IF (DMA_USEHS)
push af
ld a,(HB_RTCVAL)
and %11110111 ; full
out (RTCIO),a ; clock
pop af
#ENDIF
ret
;
DMACopy ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -182,7 +197,7 @@ DMALength .dw 0 ; R0-Block length
DMADest .dw 0 ; R4-Port B, Destination address
.db %00001100 ; R4-Pulse byte follows, Pulse generated
.db 0 ; R4-Pulse offset
; .db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH
; .db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config
.db DMA_LOAD ; R6-Command Load
.db DMA_FORCE_READY ; R6-Command Force ready
.db DMA_ENABLE ; R6-Command Enable DMA
@ -201,9 +216,11 @@ DMAOTIR:
ld b,DMAOut_Len ; dma command
ld c,DMABASE ; block
;
#IF (DMA_USEHS)
ld a,(HB_RTCVAL)
or %00001000 ; half
out (RTCIO),a ; clock
#ENDIF
di
otir ; load and execute dma
ei
@ -214,11 +231,13 @@ DMAOTIR:
and %00111011 ; if failed
sub %00011011
;
#IF (DMA_USEHS)
push af
ld a,(HB_RTCVAL)
and %11110111 ; full
out (RTCIO),a ; clock
pop af
#ENDIF
ret
;
DMAOutCode ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -235,7 +254,7 @@ DMAOutDest .db 0 ; R4-Port B, Destination port
; .db %00001100 ; R4-Pulse byte follows, Pulse generated
; .db 0 ; R4-Pulse offset
.db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH
.db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config
.db DMA_LOAD ; R6-Command Load
.db %00000101 ; R0-Port A is Source
.db DMA_LOAD ; R6-Command Load
@ -256,9 +275,11 @@ DMAINIR:
ld b,DMAIn_Len ; dma command
ld c,DMABASE ; block
;
#IF (DMA_USEHS)
ld a,(HB_RTCVAL)
or %00001000 ; half
out (RTCIO),a ; clock
#ENDIF
di
otir ; load and execute dma
ei
@ -269,11 +290,13 @@ DMAINIR:
and %00111011 ; if failed
sub %00011011
;
#IF (DMA_USEHS)
push af
ld a,(HB_RTCVAL)
and %11110111 ; full
out (RTCIO),a ; clock
pop af
#ENDIF
ret
;
DMAInCode ;.db DMA_DISABLE ; R6-Command Disable DMA
@ -287,7 +310,7 @@ DMAInLength .dw 0 ; R0-Block length
DMAInSource .db 0 ; R4-Port B, Destination port
; .db %00001100 ; R4-Pulse byte follows, Pulse generated
; .db 0 ; R4-Pulse offset
.db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH
.db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config
.db DMA_LOAD ; R6-Command Load
.db DMA_FORCE_READY ; R6-Command Force ready
.db DMA_ENABLE ; R6-Command Enable DMA
@ -295,7 +318,7 @@ DMAInSource .db 0 ; R4-Port B, Destination port
DMAIn_Len .equ $-DMAInCode
;
;==================================================================================================
; DEBUG - READ START, DESTINATION AN COUNT REGISTERS
; DEBUG - READ START, DESTINATION AND COUNT REGISTERS
;==================================================================================================
;
#IF (0)

1
Source/HBIOS/std.asm

@ -225,6 +225,7 @@ DMAMODE_ECB .EQU 1 ; ECB-DMA WOLFGANG KABATZKE'S Z80 DMA ECB BOARD
DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA
DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA
DMAMODE_RC .EQU 4 ; RC2014 Z80 DMA
DMAMODE_MBC .EQU 5 ; MBC
;
; SERIAL DEVICE CONFIGURATION CONSTANTS
;

2
Source/HBIOS/uf.asm

@ -64,7 +64,7 @@ UF_INIT:
OR A ; REQUIRES TERMINAL PROGRAM
RET NZ ; TO HAVE INITIALIZED PORT
CALL PRTSTRD ; ON PC SIDE.
.TEXT " No connection$"
.TEXT " NO CONNECTION$"
RET
;
; INPUT A CHARACTER AND RETURN IT IN E

Loading…
Cancel
Save