added dome and loader
This commit is contained in:
parent
eaf2415a63
commit
95503dd119
20
src/bios/0module.mk
Normal file
20
src/bios/0module.mk
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
BIOS_NAME := bios
|
||||
BIOS_SRC := $(PATH_SRC)/$(BIOS_NAME)
|
||||
BIOS_BIN := $(PATH_BIN)/$(BIOS_NAME)
|
||||
BIOS_HEX := $(BIOS_BIN)/$(BIOS_NAME).hex
|
||||
BIOS_DAT := $(BIOS_BIN)/$(BIOS_NAME).dat
|
||||
BIOS_RELS := $(BIOS_BIN)/$(BIOS_NAME).rel
|
||||
BIOS_CODE := $(BIOS_SRC)/$(BIOS_NAME).asm
|
||||
|
||||
$(BIOS_BIN):
|
||||
$(call mod_mkdir,$(BIOS_BIN))
|
||||
|
||||
$(BIOS_BIN)/%.rel: $(BIOS_SRC)/%.asm | $(BIOS_BIN)
|
||||
$(call mod_compile_asm,$@,$<)
|
||||
|
||||
$(BIOS_HEX): $(BIOS_RELS)
|
||||
$(call mod_link_asm_dos,$(BIOS_HEX),$(BIOS_RELS))
|
||||
|
||||
$(BIOS_DAT): $(BIOS_HEX)
|
||||
$(call mod_hex2dat,$(BIOS_HEX),$(BIOS_DAT))
|
1697
src/bios/bios.asm
Normal file
1697
src/bios/bios.asm
Normal file
File diff suppressed because it is too large
Load diff
20
src/dome/0module.mk
Normal file
20
src/dome/0module.mk
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
DOME_NAME := dome
|
||||
DOME_SRC := $(PATH_SRC)/$(DOME_NAME)
|
||||
DOME_BIN := $(PATH_BIN)/$(DOME_NAME)
|
||||
DOME_HEX := $(DOME_BIN)/$(DOME_NAME).hex
|
||||
DOME_DAT := $(DOME_BIN)/$(DOME_NAME).dat
|
||||
DOME_RELS := $(DOME_BIN)/$(DOME_NAME).rel
|
||||
DOME_CODE := $(DOME_SRC)/$(DOME_NAME).asm
|
||||
|
||||
$(DOME_BIN):
|
||||
$(call mod_mkdir,$(DOME_BIN))
|
||||
|
||||
$(DOME_BIN)/%.rel: $(DOME_SRC)/%.asm | $(DOME_BIN)
|
||||
$(call mod_compile_asm,$@,$<)
|
||||
|
||||
$(DOME_HEX): $(DOME_RELS)
|
||||
$(call mod_link_asm_8000,$(DOME_HEX),$(DOME_RELS))
|
||||
|
||||
$(DOME_DAT): $(DOME_HEX)
|
||||
$(call mod_hex2dat,$(DOME_HEX),$(DOME_DAT))
|
1207
src/dome/ai_new.asm
Normal file
1207
src/dome/ai_new.asm
Normal file
File diff suppressed because it is too large
Load diff
8425
src/dome/dome.asm
Normal file
8425
src/dome/dome.asm
Normal file
File diff suppressed because it is too large
Load diff
20
src/init/0module.mk
Normal file
20
src/init/0module.mk
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
INIT_NAME := init
|
||||
INIT_SRC := $(PATH_SRC)/$(INIT_NAME)
|
||||
INIT_BIN := $(PATH_BIN)/$(INIT_NAME)
|
||||
INIT_HEX := $(INIT_BIN)/$(INIT_NAME).hex
|
||||
INIT_COM := $(INIT_BIN)/$(INIT_NAME).com
|
||||
INIT_RELS := $(INIT_BIN)/$(INIT_NAME).rel
|
||||
INIT_CODE := $(INIT_SRC)/$(INIT_NAME).asm
|
||||
|
||||
$(INIT_BIN):
|
||||
$(call mod_mkdir,$(INIT_BIN))
|
||||
|
||||
$(INIT_BIN)/%.rel: $(INIT_SRC)/%.asm | $(INIT_BIN)
|
||||
$(call mod_compile_asm,$@,$<)
|
||||
|
||||
$(INIT_HEX): $(INIT_RELS)
|
||||
$(call mod_link_asm_dos,$(INIT_HEX),$(INIT_RELS))
|
||||
|
||||
$(INIT_COM): $(INIT_HEX)
|
||||
$(call mod_hex2com,$(INIT_HEX),$(INIT_COM))
|
716
src/init/init.asm
Normal file
716
src/init/init.asm
Normal file
|
@ -0,0 +1,716 @@
|
|||
;------------------------------------
|
||||
; DOME
|
||||
;
|
||||
; (c) 1998 PARAGON Productions
|
||||
;
|
||||
; DOME.COM
|
||||
;
|
||||
;------------------------------------
|
||||
DOS .equ 0x5
|
||||
D_OPEN .equ 0x0F
|
||||
D_SETDMA .equ 0x1A
|
||||
D_READ .equ 0x27
|
||||
D_CLOSE .equ 0x10
|
||||
|
||||
.area _CODE
|
||||
JP START
|
||||
|
||||
.db 0x0D ; type dome.com
|
||||
.db 0x0D,0x0A
|
||||
.str "DOME (c) 1999 PARAGON Productions"
|
||||
.db 0x0D,0x0A
|
||||
.db 0x1A ; Einde txt
|
||||
TXT_END:
|
||||
|
||||
.ds 0x4000 ;-TXT_END (XASM CRACHED HIEROP !!!)
|
||||
|
||||
TXT_HELP:
|
||||
.str "GETTING STATED WITH DOME"
|
||||
.db 0x0A,0x0D
|
||||
.db 0x0A,0x0D
|
||||
.str "GAME STORY:"
|
||||
.db 0x0A,0x0D
|
||||
.db 0x0A,0x0D
|
||||
.str "The evel harkonon are at war with"
|
||||
.db 0x0A,0x0D
|
||||
.str "the shadow attridis....."
|
||||
.db 0x0A,0x0D
|
||||
.db 0x0A,0x0D
|
||||
.str "that is the true story of dome."
|
||||
.db 0x0A,0x0D
|
||||
.db 0x0A,0x0D
|
||||
.str "GAME PLAY:"
|
||||
.db 0x0A,0x0D
|
||||
.db 0x0A,0x0D
|
||||
.str "Very simple"
|
||||
.db 0x0A,0x0D,0x1D
|
||||
|
||||
TXT_COM:
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str "Below you see a listing of all the"
|
||||
.db 0x0A,0x0D
|
||||
.str "extra options you can give to DOME."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /? = This text. "
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /HELP = This functions give's you the entire "
|
||||
.db 0x0A,0x0D
|
||||
.str " help of DOME."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /TEST = START'S ONLY LEVEL 001 WITH MIN. INIT."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /MOUSEx = x is 1 or #2 so you can skip the mouse search."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /FMPAC = DOME asume's you have a FM-PAC."
|
||||
.db 0x0A,0x0D
|
||||
.str " And forces if moonsound drv is found to reload."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " /NO_SCSI= DOME don't seek's thoug your MSX-SCSI config."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
.str " PS : Your are also able to type in small letter."
|
||||
.db 0x0A,0x0D
|
||||
.str " "
|
||||
.db 0x0A,0x0D
|
||||
|
||||
.str "_______________DOME_______________"
|
||||
.db 0x0A,0x0D
|
||||
.str " PARAGON PRODUCTIONS (C)1999"
|
||||
.db 0x0A,0x0D,0x1D
|
||||
|
||||
|
||||
TXT_DOME_LIB: .str "LOADING : DOME_LIB...."
|
||||
.db 0x1D
|
||||
TXT_DOME_MUS: .str "LOADING : DOME_MUSDRV."
|
||||
.db 0x1D
|
||||
TXT_DOME_BIOS: .str "LOADING : DOME_BIOS..."
|
||||
.db 0x1D
|
||||
TXT_DOME_LOADER:.str "LOADING : DOME_LOADER."
|
||||
.db 0x1D
|
||||
TXT_READY: .str "Ready"
|
||||
.db 0x0A,0x0D,0x1D
|
||||
|
||||
START:
|
||||
LD A,(0x0080) ; aantal tekens
|
||||
OR A
|
||||
CALL NZ,GET_COM ; 0 tekens = geen tekst
|
||||
|
||||
CALL CHK_DISK
|
||||
|
||||
CALL CHK_MUS
|
||||
|
||||
LD A,(0x0080)
|
||||
|
||||
LD HL,#TXT_COM
|
||||
BIT 0,A
|
||||
JP NZ,PUT_TXT ; TEXT COMMMENT'S
|
||||
|
||||
BIT 1,A
|
||||
JP NZ,PRT_HELP ; DOME HELP MOET GRAFISH
|
||||
|
||||
LD HL,#TXT_DOME_LIB
|
||||
CALL PUT_TXT
|
||||
|
||||
; LD HL,#DOME_LIB
|
||||
; CALL INIT_LIB
|
||||
|
||||
LD HL,#TXT_READY
|
||||
CALL PUT_TXT
|
||||
|
||||
LD HL,#TXT_DOME_BIOS
|
||||
CALL PUT_TXT
|
||||
|
||||
LD HL,#BIOS
|
||||
LD DE,#0x0100
|
||||
LD A,#0 ; 254
|
||||
LD BC,#0x3000
|
||||
CALL LOAD
|
||||
|
||||
LD HL,#TXT_READY
|
||||
CALL PUT_TXT
|
||||
|
||||
LD HL,#TXT_DOME_LOADER
|
||||
CALL PUT_TXT
|
||||
|
||||
LD HL,#LOADER
|
||||
LD DE,#0x8000
|
||||
LD A,#0 ; 255=+CLOSE
|
||||
LD BC,#0x3000
|
||||
CALL LOAD
|
||||
|
||||
LD HL,#TXT_READY
|
||||
CALL PUT_TXT
|
||||
|
||||
ld e,#"0"
|
||||
ld c,#0x02
|
||||
call DOS
|
||||
|
||||
ld e,#0x0A
|
||||
ld c,#0x02
|
||||
call DOS
|
||||
ld e,#0x0D
|
||||
ld c,#0x02
|
||||
call DOS
|
||||
|
||||
LD DE,#0x8000
|
||||
DUMP_LOOP:
|
||||
LD A,(DE)
|
||||
PUSH DE
|
||||
CALL PUTHEX
|
||||
POP DE
|
||||
INC DE
|
||||
LD A,D
|
||||
CP #0x81
|
||||
JR NZ,DUMP_LOOP
|
||||
|
||||
DI ; VEILIGHEID
|
||||
JP 0x8000
|
||||
|
||||
DOME_LIB: .str "DOME 000"
|
||||
BIOS: .str "BIOS DAT"
|
||||
LOADER: .str "LOADER DAT"
|
||||
WAVEDRV: .str "WAVEDRV COM"
|
||||
|
||||
|
||||
|
||||
|
||||
PUTHEX:
|
||||
PUSH AF
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
CALL HEXSUB
|
||||
POP AF
|
||||
HEXSUB:
|
||||
AND #0x0F
|
||||
ADD A,#'0'
|
||||
CP #'9'+1
|
||||
JR C,HEXS1
|
||||
ADD A,#'A'-10-'0'
|
||||
HEXS1:
|
||||
LD E,A
|
||||
LD C,#2
|
||||
CALL DOS
|
||||
RET
|
||||
|
||||
CHK_DISK:
|
||||
LD A,#0 ;CURRENT
|
||||
LD C,#0x1B
|
||||
CALL DOS
|
||||
|
||||
RET
|
||||
|
||||
CHK_MUS:
|
||||
LD HL,#TXT_DOME_MUS
|
||||
CALL PUT_TXT
|
||||
CALL CHK_OPL4
|
||||
|
||||
LD HL,#TXT_READY
|
||||
JP NZ,PUT_TXT
|
||||
|
||||
;CALL CHK_MUSIC
|
||||
LD HL,#TXT_READY
|
||||
JP PUT_TXT
|
||||
|
||||
CHK_OPL4:
|
||||
LD A,#5
|
||||
OUT (0xC6),A ; reg 5 ( FM)
|
||||
PUSH BC
|
||||
POP BC
|
||||
LD A,#3
|
||||
OUT (0xC5),A ; SET OPL4 REGISTER SET
|
||||
PUSH BC
|
||||
POP BC
|
||||
LD A,#2
|
||||
OUT (0x7E),A ; REG 2 (WAVE)
|
||||
PUSH BC
|
||||
POP BC
|
||||
IN A,(0x7F) ;
|
||||
CPL
|
||||
OR A
|
||||
RET Z ; GEEN OPL4 DUS OOK GEEN DRV
|
||||
|
||||
XOR A ; get mapper variable table
|
||||
LD D,#4
|
||||
LD E,#1
|
||||
CALL 0xFFCA
|
||||
LD A,C ; XOR A ???
|
||||
LD BC,#2
|
||||
ADD HL,BC
|
||||
LD A,(HL)
|
||||
|
||||
CP #6 ; MUSIC NEED 4 SEGMENTS !!!!!!!!!!!!!!!!!!!
|
||||
JP NC,CHK_OPL4_CONT ; MEER DAN 6
|
||||
|
||||
CALL CHECK_IF_INST
|
||||
RET NZ ; GEEN DRV
|
||||
|
||||
LD HL,#WAVEDRV
|
||||
CALL RELEASE_DRV
|
||||
CHK_OPL4_EXIT:
|
||||
LD A,#1
|
||||
OR A ; NZ ANDERS MUSIC OOK
|
||||
RET
|
||||
|
||||
CHK_OPL4_CONT:
|
||||
LD A,(0x0080)
|
||||
BIT 3,A
|
||||
LD HL,#WAVEDRV
|
||||
JR NZ,LOAD_DRV ; GEWWON NOG EEN KEER LADEN
|
||||
|
||||
CALL CHECK_IF_INST
|
||||
JR Z,CHK_OPL4_EXIT
|
||||
LD HL,#WAVEDRV
|
||||
LOAD_DRV:
|
||||
LD IY,#0x0080
|
||||
LD A,(IY)
|
||||
PUSH AF
|
||||
|
||||
LD (IY),#7
|
||||
LD (IY),#" "
|
||||
LD (IY),#"/"
|
||||
LD (IY),#"I"
|
||||
LD (IY),#">"
|
||||
LD (IY),#"N"
|
||||
LD (IY),#"U"
|
||||
LD (IY),#"L"
|
||||
|
||||
LD DE,#0x0100
|
||||
LD BC,#0x1000
|
||||
LD A,#0
|
||||
CALL LOAD
|
||||
|
||||
CALL 0x0100 ; WAVE DRV
|
||||
|
||||
POP AF
|
||||
LD (0x0080),A
|
||||
RET
|
||||
|
||||
RELEASE_DRV:
|
||||
LD IY,#0x0080
|
||||
LD A,(IY)
|
||||
PUSH AF
|
||||
|
||||
LD (IY),#7
|
||||
LD (IY),#" "
|
||||
LD (IY),#"/"
|
||||
LD (IY),#"R"
|
||||
LD (IY),#">"
|
||||
LD (IY),#"N"
|
||||
LD (IY),#"U"
|
||||
LD (IY),#"L"
|
||||
|
||||
LD DE,#0x0100
|
||||
LD BC,#0x1000
|
||||
LD A,#0
|
||||
CALL LOAD
|
||||
|
||||
CALL 0x0100 ; WAVE DRV
|
||||
|
||||
POP AF
|
||||
LD (0x0080),A
|
||||
RET
|
||||
|
||||
|
||||
|
||||
; Check if replayer is installed
|
||||
; output: if nz=0 not installed
|
||||
; if z=1 installed
|
||||
|
||||
CHECK_IF_INST:
|
||||
LD HL,#ID_FB04
|
||||
LD DE,#0xFB04+21
|
||||
LD B,#5
|
||||
CHECK_IF_INST_LP:
|
||||
LD A,(DE)
|
||||
CP (HL)
|
||||
RET NZ
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ CHECK_IF_INST_LP
|
||||
RET
|
||||
|
||||
ID_FB04:.str "MBTSR" ; If this is on address FB04h+21
|
||||
|
||||
;=====
|
||||
|
||||
GET_COM:
|
||||
LD IY,#0x0080
|
||||
LD HL,#0x0081
|
||||
LD B,(IY)
|
||||
LD (IY),#0
|
||||
GET_COM_LP:
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
|
||||
CP #"?"
|
||||
JR NZ,GET_COM_CONT
|
||||
SET 0,(IY) ; ACTIVATE HELP HIGHEST PIRIOTIJD
|
||||
GET_COM_CONT:
|
||||
|
||||
PUSH BC
|
||||
PUSH HL ; DOOR INC HL GA DOOR NAAR NEXT CMD
|
||||
CP #"/"
|
||||
CALL Z,GET_COM_STR
|
||||
POP HL
|
||||
POP BC
|
||||
|
||||
DJNZ GET_COM_LP
|
||||
RET
|
||||
|
||||
;=====
|
||||
|
||||
|
||||
GET_COM_STR:
|
||||
LD DE,#GET_COM_TAB
|
||||
GET_COM_STR_LP:
|
||||
LD A,(HL)
|
||||
LD C,A
|
||||
|
||||
LD A,(DE)
|
||||
OR A
|
||||
JR Z,GET_COM_BIT ; NEXT COM
|
||||
|
||||
CP #255 ; GEEN COMMANDO FOUND
|
||||
RET Z
|
||||
|
||||
CP C
|
||||
JR Z,GET_COM_STR_CONT ; A
|
||||
|
||||
ADD #32
|
||||
CP C
|
||||
JR Z,GET_COM_STR_CONT ; a
|
||||
|
||||
GET_COM_STR_NOT_LP:
|
||||
LD A,(DE)
|
||||
INC DE
|
||||
OR A
|
||||
JR NZ,GET_COM_STR_NOT_LP ; ZOEK TOT VOLGEND COM
|
||||
|
||||
INC DE
|
||||
|
||||
POP BC ; CALL STACK
|
||||
POP HL ; ; org ADR OF CMD
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
|
||||
JR GET_COM_STR_LP
|
||||
|
||||
GET_COM_STR_CONT:
|
||||
INC HL
|
||||
INC DE
|
||||
JR GET_COM_STR_LP
|
||||
|
||||
;----
|
||||
|
||||
GET_COM_BIT:
|
||||
INC DE
|
||||
LD A,(DE)
|
||||
DEC A
|
||||
JR Z,COM_HELP
|
||||
DEC A
|
||||
JR Z,COM_DOS2
|
||||
DEC A
|
||||
JR Z,COM_FMPAC
|
||||
DEC A
|
||||
JR Z,COM_NO_SCSI
|
||||
DEC A
|
||||
JR Z,COM_MOUSE
|
||||
DEC A
|
||||
JR Z,COM_NO_TXT
|
||||
RET
|
||||
COM_HELP:
|
||||
SET 1,(IY)
|
||||
RET
|
||||
COM_DOS2:
|
||||
SET 2,(IY)
|
||||
RET
|
||||
COM_FMPAC:
|
||||
SET 3,(IY)
|
||||
RET
|
||||
COM_NO_SCSI:
|
||||
SET 4,(IY)
|
||||
RET
|
||||
COM_MOUSE:
|
||||
SET 5,(IY)
|
||||
LD A,(HL)
|
||||
CP #"1"
|
||||
RET Z
|
||||
SET 6,(IY)
|
||||
RET
|
||||
COM_NO_TXT:
|
||||
SET 7,(IY)
|
||||
RET
|
||||
|
||||
|
||||
GET_COM_TAB:
|
||||
.str "HELP"
|
||||
.db 0,1 ; /HELP = COM.. 0=LAST
|
||||
.str "TEST"
|
||||
.db 0,2
|
||||
.str "FMPAC"
|
||||
.db 0,3
|
||||
.str "NO_SCSI"
|
||||
.db 0,4
|
||||
.str "MOUSE"
|
||||
.db 0,5
|
||||
.str "NO_TXT"
|
||||
.db 0,6,255
|
||||
|
||||
|
||||
|
||||
PRT_HELP:
|
||||
LD HL,#TXT_HELP
|
||||
JP PUT_TXT
|
||||
|
||||
|
||||
|
||||
PUT_TXT:
|
||||
LD A,(HL)
|
||||
CP #0x1D
|
||||
RET Z
|
||||
LD E,A
|
||||
LD C,#2
|
||||
PUSH HL
|
||||
CALL DOS
|
||||
POP HL
|
||||
INC HL
|
||||
JR PUT_TXT
|
||||
|
||||
|
||||
; IF A=NOT 254 OR A=NOT 255 THEN
|
||||
;
|
||||
; HL= FILE NAME (LOAD_BIN)
|
||||
; DE= DMA-ADR
|
||||
; A= HEADER TRACH
|
||||
; BC= LENGTE
|
||||
; ELSE
|
||||
; HL= FILE NAME (LOAD_LIB)
|
||||
; DE= DMA-ADR
|
||||
;
|
||||
; IF A=255 THEN CLOSE_LIB
|
||||
; END
|
||||
|
||||
|
||||
LOAD:
|
||||
CP #254 ; CLOSE LIB ON EXIT
|
||||
JR C,LOAD_BIN ; KLEINER DAN
|
||||
|
||||
EX AF,AF
|
||||
PUSH DE ; ADR
|
||||
|
||||
CALL SEARCH_FILE ; if found lengte in HL
|
||||
|
||||
POP DE ; ADR
|
||||
PUSH HL ; LENGT
|
||||
CALL SETDMA ; DE is adres
|
||||
|
||||
POP HL
|
||||
CALL READ
|
||||
|
||||
EX AF,AF
|
||||
CP #255
|
||||
RET NZ
|
||||
JP CLOSE
|
||||
|
||||
;---------
|
||||
|
||||
LOAD_BIN:
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
|
||||
CALL PUT_NAM_FCB
|
||||
CALL OPEN
|
||||
|
||||
POP DE
|
||||
CALL SETDMA
|
||||
|
||||
POP HL
|
||||
LD L,H ; KAN ??
|
||||
LD H,#0
|
||||
CALL READ ; kan dit ??
|
||||
|
||||
POP HL
|
||||
CALL READ ; op oude DMA adres ???
|
||||
CALL CLOSE ; ja !! raar he ?!
|
||||
RET
|
||||
|
||||
; Zoek file op in directory en stel record number in
|
||||
; In: HL: adres te laden file-naam
|
||||
; DE: adres directory
|
||||
; Uit: HL: lengte file
|
||||
; A: 0 indien gelukt, 255 indien mislukt
|
||||
|
||||
SEARCH_FILE:
|
||||
LD DE,#DIRECTORY ; eerste2 bytes zijn aantal files
|
||||
SEARCH_FILE0:
|
||||
|
||||
PUSH HL ; adres naam v.d. file
|
||||
PUSH DE ; adres directory
|
||||
|
||||
CALL CMP_STR
|
||||
OR A
|
||||
JR Z,SEARCH_FILE1
|
||||
|
||||
POP DE
|
||||
LD HL,#11 + 2 + 3
|
||||
ADD HL,DE
|
||||
EX DE,HL ; DE = positie in directory
|
||||
POP HL
|
||||
JR SEARCH_FILE0
|
||||
|
||||
SEARCH_FILE1: ; HL = adres in directory
|
||||
EX DE,HL
|
||||
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL) ; laad lengte
|
||||
INC HL
|
||||
PUSH DE
|
||||
|
||||
LD DE,#FCB + 33
|
||||
LD BC,#3
|
||||
LDIR ; Record Number naar FCB
|
||||
|
||||
XOR A ; drive ??
|
||||
LD (DE),A
|
||||
|
||||
POP HL ; lengte in HL
|
||||
|
||||
POP DE
|
||||
POP DE
|
||||
RET
|
||||
|
||||
CMP_STR:
|
||||
LD B,#11
|
||||
CMP_STR1:
|
||||
LD A,(DE)
|
||||
CP (HL)
|
||||
RET NZ
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ CMP_STR1
|
||||
XOR A
|
||||
RET
|
||||
|
||||
|
||||
; Laad directory
|
||||
; In: HL: Adres filename
|
||||
; DE: Bestemmingsadres directory
|
||||
|
||||
INIT_LIB:
|
||||
LD DE,#DIRECTORY
|
||||
|
||||
PUSH DE
|
||||
PUSH DE
|
||||
|
||||
CALL PUT_NAM_FCB ; put HL in FCB
|
||||
CALL OPEN
|
||||
|
||||
cp #0
|
||||
jr z,INIT_LIB_OK
|
||||
|
||||
LD HL,#FILE_ERROR
|
||||
LD B,#10
|
||||
CALL PUT_TXT
|
||||
|
||||
INIT_LIB_OK:
|
||||
|
||||
POP DE
|
||||
CALL SETDMA ; destination is DIRECTORY
|
||||
|
||||
LD HL,#2
|
||||
CALL READ
|
||||
|
||||
POP HL ; In BC aantal files
|
||||
LD C,(HL)
|
||||
INC HL
|
||||
LD B,(HL)
|
||||
|
||||
LD HL,#0
|
||||
LD DE,#11 + 3 + 2 ; lengte entry = name
|
||||
|
||||
CALC_LENGTH:
|
||||
ADD HL,DE
|
||||
DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,CALC_LENGTH
|
||||
|
||||
CALL READ ; lees directory struct
|
||||
|
||||
RET
|
||||
|
||||
;=========================================================================
|
||||
;=========================================================================
|
||||
;=================== SUBS ==============================================
|
||||
;=========================================================================
|
||||
;=========================================================================
|
||||
|
||||
|
||||
PUT_NAM_FCB: ; ; In: HL = file name pointer
|
||||
LD DE,#FCB+1
|
||||
LD BC,#0x0B ; Out: A = drive name (0 = def., 1 =
|
||||
LDIR ; Cng: HL,DE BC,AF
|
||||
XOR A
|
||||
LD (FCB),A ; (DRVNAM) must be valid
|
||||
RET
|
||||
|
||||
SETDMA:
|
||||
LD C,#D_SETDMA ; DE=ADR
|
||||
JP DOS
|
||||
OPEN:
|
||||
LD DE,#FCB
|
||||
LD C,#D_OPEN
|
||||
CALL DOS
|
||||
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
|
||||
|
||||
READ:
|
||||
LD DE,#FCB
|
||||
LD C,#D_READ ; HL=NR BYTES
|
||||
JP DOS
|
||||
|
||||
CLOSE:
|
||||
LD DE,#FCB
|
||||
LD C,#D_CLOSE
|
||||
JP DOS
|
||||
|
||||
FILE_ERROR: .str " NOT FOUND" ; 10 len
|
||||
.db 0x0A,0x0D
|
||||
|
||||
FCB: .db 0
|
||||
FILENAME: .str " "
|
||||
BLOCK: .dw #00
|
||||
RECORDLENGTH: .dw #00
|
||||
FILELENGTH: .dw #00,#00
|
||||
SYSTEMVAR: .dw #00,#00,#00,#00,#00,#00
|
||||
.db 0
|
||||
RECORDNR: .dw #00,#00
|
||||
|
||||
|
||||
DIRECTORY:
|
||||
.db 0 ; 7 BYTES PER FILE OF 11+3+2 suckS
|
||||
; ; NAAM - LENGTE - REC.NUM
|
||||
|
||||
.area _DATA
|
Loading…
Reference in a new issue