Added project
This commit is contained in:
parent
bd944fa6cd
commit
0c304be6f7
26 changed files with 4271 additions and 0 deletions
233
src/tara/disk.asm
Normal file
233
src/tara/disk.asm
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
;---------------------
|
||||
; D_FIELD : leest het veld in op 0x4000
|
||||
;-------------------
|
||||
|
||||
D_FIELD:
|
||||
LD HL,#D_FIELD_FIL
|
||||
CALL GETNAM
|
||||
CALL OPEN
|
||||
CALL SETFCB
|
||||
LD DE,#0x4000
|
||||
CALL SETDMA
|
||||
LD HL,#0x8000
|
||||
CALL READ
|
||||
JP CLOSE
|
||||
D_FIELD_SAVE:
|
||||
LD HL,#D_FIELD_FIL
|
||||
CALL GETNAM
|
||||
CALL CREATE
|
||||
CALL SETFCB
|
||||
LD DE,#0x4000
|
||||
CALL SETDMA
|
||||
LD HL,#0x8000
|
||||
CALL WRITE
|
||||
JP CLOSE
|
||||
|
||||
SETDMA:
|
||||
LD C,#D_SETDMA ; DE=ADR
|
||||
JP DOS
|
||||
OPEN:
|
||||
LD DE,#FCB
|
||||
LD C,#D_OPEN
|
||||
JP DOS
|
||||
READ:
|
||||
LD DE,#FCB
|
||||
LD C,#D_READ ; HL=NR BYTES
|
||||
JP DOS
|
||||
CLOSE:
|
||||
LD DE,#FCB
|
||||
LD C,#D_CLOSE
|
||||
JP DOS
|
||||
SETFCB:
|
||||
LD HL,#0x01
|
||||
LD (FCB+14),HL ; Record length = 1 byte
|
||||
DEC L
|
||||
LD (FCB+33),HL
|
||||
LD (FCB+35),HL ; Current record number = 0
|
||||
RET
|
||||
|
||||
WRITE:
|
||||
LD DE,#FCB ; HL,NR BYTES
|
||||
LD C,#D_WRITE
|
||||
JP DOS
|
||||
CREATE:
|
||||
LD DE,#FCB
|
||||
LD C,#D_CREATE
|
||||
JP DOS
|
||||
|
||||
|
||||
;---------------------------------------------
|
||||
; L_GFX : laad gfx in op (BC,DE)-(BC+212,DE+255)
|
||||
; IN : HL = pionter naar naam
|
||||
;---------------------------------------------
|
||||
|
||||
L_GFX:
|
||||
PUSH HL
|
||||
LD HL,#GFX_CMD+2
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD (HL),D
|
||||
INC HL
|
||||
LD (HL),C
|
||||
INC HL
|
||||
LD (HL),B
|
||||
POP HL
|
||||
|
||||
CALL GETNAM ; In: HL = file name address (pointe
|
||||
|
||||
LD DE,#FCB
|
||||
LD C,#D_OPEN
|
||||
CALL BDOS ; Open file
|
||||
|
||||
LD HL,#0x01
|
||||
LD (FCB+14),HL ; Record length = 1 byte
|
||||
DEC L
|
||||
LD (FCB+33),HL
|
||||
LD (FCB+35),HL ; Current record number = 0
|
||||
|
||||
LD HL,(FCB+16)
|
||||
LD (D_BESTLN),HL
|
||||
LD HL,(FCB+18)
|
||||
LD (D_BESTLN+2),HL ; Save file-length
|
||||
|
||||
LD HL,#GFX_CMD
|
||||
CALL DO_CMD
|
||||
EI
|
||||
|
||||
D_NEXT_READ:
|
||||
CALL D_GETLEN ; Block-length 0x4000 or smaller if l
|
||||
EX DE,HL ; Block-length in HL
|
||||
PUSH HL
|
||||
|
||||
LD DE,#0x4000
|
||||
LD C,#D_SETDMA
|
||||
CALL BDOS ; Set DMA-address
|
||||
|
||||
POP HL
|
||||
PUSH HL ; BDOS verandert HL
|
||||
|
||||
LD DE,#FCB
|
||||
LD C,#D_READ
|
||||
CALL BDOS ; Read current block
|
||||
|
||||
POP HL
|
||||
|
||||
EX DE,HL ; Block-length in DE
|
||||
LD HL,#0x4000 ; RAM start address
|
||||
D_NEXT_ADR:
|
||||
IN A,(0x65)
|
||||
RRCA
|
||||
JR NC,D_READ_RDY ; Command ready
|
||||
|
||||
AND #0x40
|
||||
JR Z,D_NEXT_ADR ; Transfer not ready
|
||||
|
||||
LD A,(HL) ; Get byte from main RAM
|
||||
OUT (0x62),A ; into VRAM
|
||||
|
||||
INC HL
|
||||
DEC DE
|
||||
|
||||
LD A,(D_FF)
|
||||
CP #0
|
||||
JP Z,D_HEADER
|
||||
|
||||
INC HL
|
||||
DEC DE ; 7 bytes van de header overslaan
|
||||
INC HL
|
||||
DEC DE
|
||||
INC HL
|
||||
DEC DE
|
||||
INC HL
|
||||
DEC DE
|
||||
INC HL
|
||||
DEC DE
|
||||
INC HL
|
||||
DEC DE
|
||||
INC HL
|
||||
DEC DE
|
||||
LD A,#0
|
||||
LD (D_FF),A
|
||||
D_HEADER:
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,D_NEXT_ADR ; RAM page not empty yet
|
||||
|
||||
LD HL,(D_BESTLN+2)
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,D_NEXT_READ ; File not read completely
|
||||
|
||||
LD HL,(D_BESTLN)
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,D_NEXT_READ ; File not read completely
|
||||
D_READ_RDY:
|
||||
LD DE,#FCB
|
||||
LD C,#D_CLOSE
|
||||
CALL BDOS ; Close file
|
||||
|
||||
LD A,#0x34
|
||||
LD (D_FF),A
|
||||
OUT (0x64),A
|
||||
XOR A
|
||||
OUT (0x63),A ; Stop command
|
||||
|
||||
RET
|
||||
|
||||
; Get length of current block to be read
|
||||
|
||||
D_GETLEN:
|
||||
LD DE,#0x4000 ; In: --
|
||||
LD HL,(D_BESTLN+2) ; Out: DE = block-length
|
||||
LD A,H ; Cng: AF, DE, HL
|
||||
OR L ; Mrk: (BESTLN) should contain length
|
||||
JR NZ,D_LEN_OK ; not read part of file (32 bits
|
||||
LD HL,(D_BESTLN) ; (BESTLN) will be updated
|
||||
LD A,H ; Operation: CP HL,DE
|
||||
CP D ; In: HL = 16 bits value
|
||||
JP NZ,D_LEN_OK ; DE = 16 bits value
|
||||
LD A,L ; Out: F = same as with normal CP co
|
||||
CP E ; Cng: AF
|
||||
EX DE,HL ; Block-length is smaller than RAMBLK
|
||||
D_LEN_OK:
|
||||
LD HL,(D_BESTLN) ; when reaching the end of the file (
|
||||
OR A
|
||||
SBC HL,DE ; Decease file-length with block-leng
|
||||
LD (D_BESTLN),HL
|
||||
RET NC
|
||||
LD HL,(D_BESTLN+2)
|
||||
DEC HL
|
||||
LD (D_BESTLN+2),HL
|
||||
RET
|
||||
|
||||
; Get file name from file name pointer into FCB
|
||||
|
||||
GETNAM:
|
||||
LD DE,#FCB+1 ; In: HL = file name pointer
|
||||
LD BC,#0x0B ; Out: A = drive name (0 = def., 1 =
|
||||
LDIR ; Cng: HL,DE BC,AF
|
||||
LD A,#0 ; Mrk: FCB contains current file and
|
||||
LD (FCB),A ; (DRVNAM) must be valid
|
||||
RET
|
||||
|
||||
;---------------------------------------------
|
||||
; variabelen en tabelen
|
||||
;---------------------------------------------
|
||||
FCB:
|
||||
.ds 48
|
||||
|
||||
CURRENT_DRIVE: .db 1
|
||||
D_BESTLN: .dw 0,0 ; file-length buffer
|
||||
D_FF: .db 255 ; Fist Fuck ( HEADER OVERSLAN)
|
||||
|
||||
GFX_CMD: .db 36,17 ; REG 36 , 17 BYTES
|
||||
.dw 0 ; DX
|
||||
.dw 256 ; DY
|
||||
.dw 256 ; NX
|
||||
.dw 212 ; NY
|
||||
.db 0,12 ; 0,OPRATIE
|
||||
.dw 0xFFFF ; COLOR MASK
|
||||
.db 0,0 ; COLOR
|
||||
.db 0,0 ;
|
||||
.db 16 ; OPCODE
|
||||
Loading…
Add table
Add a link
Reference in a new issue