2
0
Fork 0
original-dome/src/loader/loader.asm

2513 lines
39 KiB
NASM
Raw Normal View History

2018-12-24 23:49:18 +00:00
;---------------------------------
; DOME LOADER
;
; (c) 1998 PARAGON Productions
;
; LOADER.DAT
;
;---------------------------------
DOS .equ 0x0005
ENASLT .equ 0x0024
GET_INT .equ 0x0100
PUT_INT .equ 0x0103
COLOR_WHITE .equ 0x0106
COLOR_BLACK .equ 0x0109
SCREEN_ON .equ 0x010C
SCREEN_OFF .equ 0x010F
SET_SCREEN0 .equ 0x0112
SET_SCREEN5 .equ 0x0115
SPRITES_ON .equ 0x0118
SPRITES_OFF .equ 0x011B
;PUT_SPRITE .equ 0x011E
SET_PAGE .equ 0x0121
GET_TIME .equ 0x0124
PUT_TXT .equ 0x0127
PUT_TXT2 .equ 0x012A
INIT_BIOS .equ 0x012D
EXIT_ON_ERR .equ 0x0130
LOAD .equ 0x0133
INIT_LIB .equ 0x0136
SAVE .equ 0x0139
PUT_PAGE_FD .equ 0x013C
PUT_PAGE_FE .equ 0x013F
INIT_REP .equ 0x0142
M_MUSLOAD .equ 0x0142
M_KITLOAD .equ 0x0145
M_PLAY .equ 0x0148
M_STOP .equ 0x014B
M_CONT .equ 0x014E
M_FADE .equ 0x0151
M_LOC .equ 0x0154
M_FREE .equ 0x0157
POP_UP_START .equ 0x015A
PUTBLK .equ 0x015D
PUT_COLOR .equ 0x0160
DOME_MENU_CALL .equ 0x0163
RESTORE_MEM .equ 0x0166
INIT_BIOS_MEM .equ 0x0169
RUN_GAME .equ 0x016C
INT_ROUTINE .equ 0x016F
HOOK_ON .equ 0x0172
HOOK_OFF .equ 0x0175
INIT_INT .equ 0x0178
M_MUSINFO .equ 0x017B
M_ADR .equ 0x017E
M_DRVINFO .equ 0x0181
M_DATA .equ 0x0184
DOSJMP .equ 0x0187
CHIPS .equ TAB_LOC-13
; CHIPS
; 0b00000000
; 1 = FMPAC
; 11 = MUS / 256 KB YES/NO
; 1 = MOONSOUND
; 1 = MSX-MIDI
; 1 = FAC-MIDI
; 1 =
; 1 =
INT_ON .equ TAB_LOC-12 ; 0=AAN
SPRATR .equ TAB_LOC-11
MOUSEY .equ TAB_LOC-11
MOUSEX .equ TAB_LOC-10
MOUSE_OFF .equ TAB_LOC-9 ; AAN OF UIT
MOUSE_USE .equ TAB_LOC-8 ; " """"""""
MOUSE_PORT .equ TAB_LOC-7 ; PORT 1 OF 2
MOUSE_WAIT1 .equ TAB_LOC-6 ; WAIT CYCLE 1
MOUSE_WAIT2 .equ TAB_LOC-5 ; WAIT CYCLE 2
MOUSE_BUTTONS .equ TAB_LOC-4
MSX_TYPE .equ TAB_LOC-3
DOSJMPTAB .equ TAB_LOC-2
TAB_LOC .equ 0x0F00
DOME_BIOS .equ 0x0F00 ; BIOS+GAMECODE(0x2500)+TANKTAB(0x3000)
DOME_VELD .equ 0x0F02 ; THE LEVEL(0x4000)
DOME_CODE .equ 0x0F04 ; THE DOME ENGINE(0x8000)
DOME_PAGE3 .equ 0x0F06 ; MORE ENGINE
DOME_MENU .equ 0x0F08 ; GFX DOME MENU+CODE(0x8000)
DOME_TEMP .equ 0x0F0A ;
DOME_CH_CODE .equ 0x0F0C ; LEVEL CHOOSER CODE
DOME_CH_GFX1 .equ 0x0F0E ; LEVEL CHOOSE GFX
DOME_CH_GFX2 .equ 0x0F10 ; GFX
DOME_MENT_CODE .equ 0x0F12 ; CODE VOOR MENTAT
DOME_MENT1 .equ 0x0F14 ; BUFFER VOOR GFX MENTAT
DOME_GFX_UNIT .equ 0x0F16 ; GAME GFX (UNIT)
DOME_GFX_BLPA .equ 0x0F18 ; GAME GFX (BALK EN PAGE)
DOME_MMENU .equ 0x0F1A ; MAIN MENU GFX + CODE AT 4000
; org 0x8000
.area _CODE
ST:
ld e,#"1"
ld c,#0x02
call 5
CALL INIT_BIOS ; SAVE START STACK
CALL INIT_SCR ; MODE 80
CALL INIT_DOSINT ; GET DOS_INT
CALL INIT_DATE ;
CALL INIT_TIME ;
CALL CHK_MSX ; ================ VANAF HIER KUNNEN DINGEN FOUT !!
CALL CHK_MOUSE ; INIT MOUSE'S
CALL CHK_VDP ;
CALL CHK_CPU ;
CALL INIT_MEM ; INIT MEM ==== DUS HEBBEN WE EEN EXTRA ERR_ROET.
CALL INIT_DISK ; LOAD'S LIB
CALL INIT_SOUND ; LOAD SOUND'S LIB
CALL INIT_LOAD ; LOAD GFX + GAME ENGINE + MENU
JP DO_INTRO ;
EXIT_ON_ERR_MEM: ; DEZE NA INIT_MEM
CALL PUT_TXT
LD HL,#TXT_ERR
CALL PUT_TXT
EXIT_ON_ERR_MEM_LP:
IN A,(0xAA) ; check op spatie...
AND #0xF0
OR #8
OUT (0xAA),A
IN A,(0xA9)
EI
HALT
AND #1
JP Z,EXIT_ON_ERR
JR EXIT_ON_ERR_MEM_LP
EXIT_ON_ERR_BF: ; DEZE VOOR INIT_MEM
CALL PUT_TXT
LD HL,#TXT_ERR
CALL PUT_TXT
EXIT_ON_ERR_BF_LP:
IN A,(0xAA) ; check op spatie...
AND #0xF0
OR #8
OUT (0xAA),A
IN A,(0xA9)
EI
HALT
AND #1
JP NZ,EXIT_ON_ERR_BF_LP
LD HL,#INT_DOS
CALL PUT_INT
LD SP,(DOS_STACK)
CALL SET_SCREEN0
RET
;=======================================================================
INIT_SCR:
;CALL SET_SCREEN0
LD A,#80
LD (0xF3AE),A
LD A,#0 ; SCREEN 0
LD IY,(0xFCC1)
LD IX,#0x5F
CALL 0x1C
LD HL,#2048
LD BC,#240
LD A,#0
LD IY,(0xFCC1)
LD IX,#0x56
CALL 0x1C
LD HL,#2048
LD B,#10
INIT_SCR_LOOP:
LD A,#255
LD IY,(0xFCC1)
LD IX,#0x4D
CALL 0x1C
INC HL
DJNZ INIT_SCR_LOOP
DI
LD A,#15*16+8
OUT (0x99),A
LD A,#128+12
OUT (0x99),A
LD A,#16*5
OUT (0x99),A
LD A,#128+13
OUT (0x99),A
EI
LD HL,#TXT_RET
CALL PUT_TXT
LD HL,#TXT_DOME_INIT
CALL PUT_TXT
RET
;=======================================================================
INIT_DOSINT:
POP DE ; CALL ENTRY WEG !!!
LD (DOS_STACK),SP
PUSH DE
LD HL,#INT_DOS
JP GET_INT
;=======================================================================
INIT_TIME:
CALL GET_TIME
PUSH DE ; SEC/0
PUSH HL ; HOUR/MIN
LD A,H
LD HL,#TXT_TIME_WR+1
CALL FIL_HL_A_DEC
POP HL
LD A,L
LD HL,#TXT_TIME_WR+4
CALL FIL_HL_A_DEC
POP DE
LD A,D
LD HL,#TXT_TIME_WR+7
CALL FIL_HL_A_DEC
LD HL,#TXT_TIME
CALL PUT_TXT
RET
;=======================================================================
INIT_DATE:
LD C,#0x2A
CALL DOS
PUSH HL
PUSH DE ; SEC/0
LD HL,#TXT_DATE_WR+2 ; MON/DEU/WOE
CALL FIL_DATE
POP DE
PUSH DE
LD A,D
LD HL,#TXT_DATE_WR+5
CALL FIL_HL_A_DEC
POP DE
LD A,E
LD HL,#TXT_DATE_WR+8
CALL FIL_HL_A_DEC
POP HL
LD DE,#1980
XOR A
SBC HL,DE
LD A,L
LD HL,#TXT_DATE_WR+13
CP #20
JR NC,INIT_DATE_JK
ADD #80
CALL FIL_HL_A_DEC
LD HL,#TXT_DATE_WR+11
LD A,#19
CALL FIL_HL_A_DEC
LD HL,#TXT_DATE
JP PUT_TXT
INIT_DATE_JK:
SUB #20
CALL FIL_HL_A_DEC
LD HL,#TXT_DATE_WR+11
LD A,#20
CALL FIL_HL_A_DEC
LD HL,#TXT_DATE
JP PUT_TXT
FIL_DATE:
PUSH HL
LD HL,#FIL_DATE_TAB
LD E,A
SLA A ; *2
ADD E ; +1
LD E,A
LD D,#0
ADD HL,DE
LD A,(HL)
INC HL
LD D,(HL)
INC HL
LD E,(HL)
POP HL
LD (HL),E
DEC HL
LD (HL),D
DEC HL
LD (HL),A
RET
FIL_DATE_TAB:
.str "SUNMONTUEWENTHUFRYSAT"
;=======================================================================
CHK_MSX:
LD HL,#TXT_MSX_TYPE
CALL PUT_TXT
LD HL,#TXT_MSX_1
OR A
CALL Z,PUT_TXT
LD HL,#0x002D
LD A,(0xFCC1)
CALL 0x0C
LD (MSX_TYPE),A
LD HL,#TXT_MSX_2
CP #1
JP Z,PUT_TXT
LD HL,#TXT_MSX_2P
CP #2
JP Z,PUT_TXT
LD HL,#TXT_MSX_TR
CP #3
JP Z,PUT_TXT
LD HL,#TXT_MSX_ON
JP PUT_TXT
;=======================================================================
;===================================
.db 0
CHK_MOUSE:
LD A,#15
OUT (0xA0),A
IN A,(0xA2)
AND #0x8F
OR #0x30
LD (MOUSE_PORT),A
XOR A
LD (MOUSE_USE),A
LD (MOUSE_OFF),A
LD HL,#0x002D
LD A,#0 ;(0xFCC1) ; SLOT ADR BIOS = 0
CALL 0x0C ; interslot call
CP #3
JR Z,CHK_MOUSE_TR
LD A,#31
LD (MOUSE_WAIT1),A
LD A,#10
LD (MOUSE_WAIT2),A
JR CHK_MOUSE_CONT
CHK_MOUSE_TR:
LD A,#31*5
LD (MOUSE_WAIT1),A
LD A,#10*5
LD (MOUSE_WAIT2),A
CHK_MOUSE_CONT:
LD A,(0x0080)
BIT 5,A
JP NZ,CHK_MOUSE_FO
LD HL,#TXT_MOUSE_CHK
CALL PUT_TXT
LD A,(MOUSE_PORT) ; Get mouse port in C
LD C,A
LD A,(MOUSE_WAIT1)
LD B,A ; Get Y move
CALL READ_MOUSE
RLCA
RLCA
RLCA
RLCA
LD H,A
CALL READ_MOUSE
OR H
LD H,A
CALL READ_MOUSE ; Get X move
RLCA
RLCA
RLCA
RLCA
LD L,A
CALL READ_MOUSE
OR L
LD C,H ; B = X-move / C = Y-move
LD B,A
LD A,B ; Move -1,-1 ?
INC A
LD H,A
LD A,C
INC A
OR H
JR Z,CHK_MOUSE_CONT1
LD A,#1
LD (CHK_MOUSE-1),A
CHK_MOUSE_CONT1:
LD A,(MOUSE_PORT) ; Check other port
XOR #0b01000000
LD (MOUSE_PORT),A
LD C,A
LD A,(MOUSE_WAIT1)
LD B,A ; Get Y move
CALL READ_MOUSE
RLCA
RLCA
RLCA
RLCA
LD H,A
CALL READ_MOUSE
OR H
LD H,A
CALL READ_MOUSE ; Get X move
RLCA
RLCA
RLCA
RLCA
LD L,A
CALL READ_MOUSE
OR L
LD C,H ; B = X-move / C = Y-move
LD B,A
LD A,B ; Move -1,-1 ?
INC A
LD H,A
LD A,C
INC A
OR H
JR Z,CHK_MOUSE_CONT2
LD A,(CHK_MOUSE-1)
SET 1,A
LD (CHK_MOUSE-1),A
CHK_MOUSE_CONT2:
LD A,(CHK_MOUSE-1)
OR A
JR Z,CHK_MOUSE_NO
LD HL,#TXT_MOUSE_YES
CALL PUT_TXT
LD A,(CHK_MOUSE-1)
LD HL,#TXT_MOUSE_PORT12
CP #3
JP Z,PUT_TXT
LD HL,#TXT_MOUSE_PORT1
BIT 0,A
CALL NZ,PUT_TXT
LD A,(CHK_MOUSE-1)
LD HL,#TXT_RET
BIT 1,A
JP Z,PUT_TXT
LD HL,#TXT_MOUSE_PORT2
JP PUT_TXT
CHK_MOUSE_NO:
LD HL,#TXT_MOUSE_NO
CALL PUT_TXT
LD HL,#TXT_MOUSE_ERR
JP EXIT_ON_ERR_BF
CHK_MOUSE_FO:
LD HL,#TXT_MOUSE_FO
CALL PUT_TXT
LD A,(MOUSE_PORT) ; Check other port
XOR #0b01000000
LD (MOUSE_PORT),A
LD HL,#TXT_MOUSE_PORT2
LD A,(0x0080)
BIT 6,A
JP NZ,PUT_TXT
LD A,(MOUSE_PORT) ; Check other port
XOR #0b01000000
LD (MOUSE_PORT),A
LD HL,#TXT_MOUSE_PORT1
CALL PUT_TXT
LD HL,#TXT_RET
JP PUT_TXT
;=========================================================================
CHK_VDP:
LD HL,#TXT_VDP_SCAN
CALL PUT_TXT
DI
LD A,#1 ; status reg. op 1
OUT (0x99),A
LD A,#0x8F
OUT (0x99),A
IN A,(0x99) ; RD ID
LD B,A
XOR A ; status reg. op 0
OUT (0x99),A
LD A,#0x8F
OUT (0x99),A
EI
LD A,B
SRL A
AND #0b00011111
PUSH AF
LD HL,#TXT_VDP_ID_WR+1
CALL FIL_HL_A_HEX
LD HL,#TXT_VDP_ID
CALL PUT_TXT
POP AF
OR A
LD HL,#TXT_VDP_38
JP Z,PUT_TXT
CP #2
LD HL,#TXT_VDP_58
JP Z,PUT_TXT
LD HL,#TXT_VDP_NOT
JP PUT_TXT
;=========================================================================
CHK_CPU:
LD HL,#TXT_CPU
CALL PUT_TXT
XOR A
EX AF,AF ; Z380
LD B,#0x40
LD C,#0 ; FLAGS SETTEN
PUSH BC
POP AF
.db 0xCB,0x37
; Z80 : SLL A SHIFT LEFT ,INSERT '1' (Z180)
; Z180 : DAA 99
; Z280 : TEST BIT7,A IF 0 THAN A<=255
; Z380 : EX A,A
LD HL,#TXT_Z280
JP P,SPEED_TEST
OR A ; Z380
LD HL,#TXT_Z380
JP Z,SPEED_TEST
LD HL,#0x002D
LD A,(0xFCC1)
CALL 0x0C
CP #3
LD HL,#TXT_Z80
JP NZ,SPEED_TEST
LD IY,(0xFCC1)
LD IX,#0x0183
CALL 0x1C
CP #1
LD HL,#TXT_R800_ROM
JP Z,SPEED_TEST
PUSH AF
LD HL,#TXT_Z80
OR A
CALL Z,SPEED_TEST
POP AF
LD HL,#TXT_R800_DRAM
CP #2
CALL Z,PUT_TXT
LD A,#1+128 ; ROM MODE
LD IY,(0xFCC1)
LD IX,#0x0180
CALL 0x1C
LD HL,#TXT_R800_DOME
SPEED_TEST:
CALL PUT_TXT
LD HL,#INT_SPEED
HALT
CALL PUT_INT
XOR A
SPEED_LOOP:
LD HL,#SPEED_COUNTER+15
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT01
JR SPEED_LOOP
SPEED_NEXT01:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT02
JR SPEED_LOOP
SPEED_NEXT02:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT03
JR SPEED_LOOP
SPEED_NEXT03:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT04
JR SPEED_LOOP
SPEED_NEXT04:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT05
JR SPEED_LOOP
SPEED_NEXT05:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT06
JR SPEED_LOOP
SPEED_NEXT06:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT07
JR SPEED_LOOP
SPEED_NEXT07:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT08
JR SPEED_LOOP
SPEED_NEXT08:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT09
JR SPEED_LOOP
SPEED_NEXT09:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT10
JR SPEED_LOOP
SPEED_NEXT10:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT11
JR SPEED_LOOP
SPEED_NEXT11:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT12
JR SPEED_LOOP
SPEED_NEXT12:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT13
JR SPEED_LOOP
SPEED_NEXT13:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT14
JR SPEED_LOOP
SPEED_NEXT14:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NEXT15
JP SPEED_LOOP
SPEED_NEXT15:
DEC HL
LD A,(HL)
INC A
OR A
LD (HL),A
JR Z,SPEED_NOT
JP SPEED_LOOP
SPEED_NOT:
DI
LD HL,#TXT_SPEED
JP EXIT_ON_ERR_BF
I_SPEED:
DI
IN A,(0x99) ; moet
LD HL,#INT_DOS
CALL PUT_INT ;; NEW INT
POP HL
LD HL,#SPEED_EXIT
PUSH HL
EI
RETI
SPEED_COUNTER:
.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 128 BITS
SPEED_EXIT:
LD HL,#SPEED_COUNTER+14
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+31
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+12
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+27 ; MOET GELIJ AAN
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+10
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+23
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+8
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+19
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+6
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+15 ; MOET GELIJ AAN
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+4
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+11
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+2
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+7 ; MOET GELIJ AAN
CALL FIL_HL_DE_HEX
LD HL,#SPEED_COUNTER+0
LD D,(HL)
INC HL
LD E,(HL)
LD HL,#TXT_SPEED_WR+3
CALL FIL_HL_DE_HEX
LD HL,#TXT_SPEED
CALL PUT_TXT
RET
;=========================================================================
INIT_MEM:
LD HL,#TAB_LOC
LD B,#64
INIT_MEM_LP:
LD (HL),#0
INC HL
DJNZ INIT_MEM_LP
LD HL,#TXT_MEMORY ; CHECKING MEM
CALL PUT_TXT
XOR A
LD D,#"M"
LD E,#30
CALL 0xFFCA
LD HL,#TXT_MEMMAN
CP #"M"
CALL Z,PUT_TXT ; MEMMAN FOUND
LD HL,#TXT_DOS ; DOS FOUND
CALL PUT_TXT
XOR A
LD C,#0x6F
CALL DOS
LD A,B ; DOS VERSION
CP #1
LD HL,#TXT_DOS1
JP C,EXIT_ON_ERR_BF
ADD #48
LD HL,#TXT_VERSION ; PRINT DOS VERSION
LD (HL),A
CALL PUT_TXT
LD HL,#TXT_DOSJMPTAB
CALL PUT_TXT
LD HL,#TXT_DOSVARTAB ;??????????????????????????
CALL PUT_TXT
XOR A ; get mapper variable table
LD D,#4
LD E,#1
CALL 0xFFCA
LD (DOSVARTAB),HL
LD HL,#TXT_ALO
CALL PUT_TXT
LD HL,(DOSVARTAB)
LD A,(HL)
PUSH AF ; SLOT ADR
LD HL,#TXT_DOS_PRI_SLT ; WRITE SLOT ADR
CALL PUT_SLT_ADR
LD HL,#TXT_DOS_PRI
CALL PUT_TXT
LD HL,(DOSVARTAB)
LD BC,#8
ADD HL,BC
LD A,(HL)
LD HL,#TXT_DOS_NO_SEC
OR A
JP Z,INIT_MEM_CONT
LD (SEC_SLOT_ADR),A
LD HL,#TXT_DOS_SEC_SLT
CALL PUT_SLT_ADR
LD HL,#TXT_DOS_SEC
INIT_MEM_CONT:
CALL PUT_TXT
LD A,#3 ; DE 4 VAN OPGESTART PAGE 0-3
LD (DOS_LOC_PRIM),A
LD (DOS_TOTAL_LOC),A
POP BC ; SLOT ADR
LD HL,#TAB_LOC
PUSH HL
LD DE,#0x1B
CALL DOSJMP
POP HL
LD (HL),B
INC HL
LD (HL),A
INC HL
PUSH HL
LD DE,#0x21
CALL DOSJMP
POP HL
LD (HL),B
INC HL
LD (HL),A
INC HL
PUSH HL
LD DE,#0x27
CALL DOSJMP
POP HL
LD (HL),B
INC HL
LD (HL),A
INC HL
PUSH HL
LD DE,#0x2D ; DOME IS 3D hAhGA
CALL DOSJMP
POP HL
LD (HL),B ; SLT ADR
INC HL
LD (HL),A ; SEGMENT NR
INC HL
INIT_MEM_PRI:
LD A,#0 ; USER SEGMANT
LD DE,#0
PUSH HL
CALL DOSJMP
POP HL
JP C,INIT_MEM_PRI_FULL
LD (HL),B ; SLT ADR
INC HL
LD (HL),A ; SEGMENT NR
INC HL
LD A,(DOS_LOC_PRIM)
INC A
LD (DOS_LOC_PRIM),A ; MORE
LD A,(DOS_TOTAL_LOC)
INC A
LD (DOS_TOTAL_LOC),A
LD D,A ; DOS_LOAC
LD A,(DOS_MAX_LOC)
LD E,A
LD A,D
CP E
JP Z,INIT_MEM_PRI_MAX ; DOME DON'T NEED MORE MEM
JR INIT_MEM_PRI ; NEXT
INIT_MEM_PRI_FULL:
LD A,(SEC_SLOT_ADR)
LD A,#0 ; disable sec
OR A
JR Z,INIT_MEM_SEC_FULL ;====================================================
INIT_MEM_SEC:
LD A,(SEC_SLOT_ADR)
LD B,A
XOR A
LD DE,#0
PUSH HL
CALL DOSJMP
POP HL
JP C,INIT_MEM_SEC_FULL
LD (HL),B ; SLT ADR
INC HL
LD (HL),A ; MAPPER NR
INC HL
LD A,(DOS_LOC_SEC)
INC A
LD (DOS_LOC_SEC),A
LD A,(DOS_TOTAL_LOC)
INC A
LD (DOS_TOTAL_LOC),A
LD A,(DOS_TOTAL_LOC)
LD D,A
LD A,(DOS_MAX_LOC)
LD E,A
LD A,D
CP E
JP Z,INIT_MEM_SEC_MAX
JR INIT_MEM_SEC
INIT_MEM_SEC_FULL:
LD A,(DOS_TOTAL_LOC)
LD B,A
LD A,(DOS_MAX_LOC)
SUB B
SLA A
LD A,#10
LD B,A
INIT_MEM_SEC_FULL_LP:
XOR A
LD (HL),A
INC HL
DJNZ INIT_MEM_SEC_FULL_LP
INIT_MEM_DONE:
LD A,(DOS_LOC_PRIM)
LD HL,#TXT_DOS_PRI_WR+1 ; LOCTECT BIJ PRIM
CALL FIL_HL_A_DEC
LD HL,#TXT_DOS_PRI_LOC
CALL PUT_TXT
LD A,(DOS_LOC_SEC)
LD HL,#TXT_DOS_SEC_WR+1 ; LOCTECT BIJ SEC
CALL FIL_HL_A_DEC
LD HL,#TXT_DOS_SEC_LOC
CALL PUT_TXT
LD A,(DOS_TOTAL_LOC)
LD HL,#TXT_DOS_TOT_WR+1 ; MOET GELIJ AAN PRIM+SEC
CALL FIL_HL_A_DEC
LD HL,#TXT_DOS_TOT_LOC
CALL PUT_TXT
LD A,(DOS_TOTAL_LOC)
LD B,A
LD A,(DOS_MAX_LOC)
CP B
LD HL,#TXT_MAX_MEM
JR NC,INIT_MEM_MAX
LD HL,#TXT_DOS_NOT_MAX
INIT_MEM_MAX:
CALL PUT_TXT
CALL INIT_BIOS_MEM ; GET THE ORGINAL WAARDEN TO THE BIOS
LD A,(DOS_TOTAL_LOC)
CP #6 ; MINDER DAN 4 KAN NIET ( DOS !! )
LD HL,#TXT_MORE_MEM
JP C,EXIT_ON_ERR_MEM ; minder dan 6
RET
INIT_MEM_PRI_MAX:
PUSH HL
LD HL,#TXT_DOS_MAX_PRI
CALL PUT_TXT
LD HL,#TXT_DOS_MAX_SEC
CALL PUT_TXT
POP HL
JP INIT_MEM_DONE
;JP INIT_MEM_PRI_FULL ; TEST ONLY !!!!!!!!11
INIT_MEM_SEC_MAX:
PUSH HL
LD HL,#TXT_DOS_MAX_SEC
CALL PUT_TXT
POP HL
JP INIT_MEM_SEC_FULL
;=========================================================================
INIT_DISK:
; LD B,#0
;INIT_DISK_WLP:
;HALT
;HALT
;HALT
;DJNZ INIT_DISK_WLP
LD HL,#TXT_DSK_INIT
CALL PUT_TXT
XOR A
LD C,#0x19
CALL DOS
INC A
LD (CURRENT_DRIVE),A
PUSH AF
LD HL,#TXT_DSK_DRV_WR
ADD A,#64
LD (HL),A
LD HL,#TXT_DSK_DRV
CALL PUT_TXT
POP BC
LD HL,#0xFB21
INIT_DISK_SLT:
LD A,(HL)
SUB B
JR NC,INIT_DISK_CNT
LD A,(HL)
LD C,A
LD A,B
SUB C
LD B,A
INC HL
INC HL
JR INIT_DISK_SLT
INIT_DISK_CNT:
INC HL
LD A,(HL)
PUSH AF
LD HL,#TXT_DSK_ROM_WR
CALL PUT_SLT_ADR
LD HL,#TXT_DSK_ROM
CALL PUT_TXT
POP AF
LD HL,#0x4000
CALL ENASLT
LD HL,#0x7F80
LD A,(HL)
CP #"H"
JR NZ,INIT_DISK_EXIT
INC HL
LD A,(HL)
CP #"D"
JR NZ,INIT_DISK_EXIT
; WE FOUND A MSX-SCSI BIOS
LD HL,#TXT_SCSI
CALL PUT_TXT
LD HL,#TXT_SCSI_NOT
LD A,(0x0080)
BIT 4,A
CALL NZ,PUT_TXT
LD A,(0x0080)
BIT 4,A
JR NZ,INIT_DISK_EXIT
CALL INIT_DISK_NOV
CALL INIT_DISK_SCSI
INIT_DISK_EXIT:
LD HL,#DOME_VELD
LD A,(HL)
LD HL,#0x4000
CALL ENASLT ; MOET OMDAT IK HET SLTADR VERANDER ZONDER BIOS
LD HL,#DOME_VELD
CALL PUT_PAGE_FD
LD HL,#TXT_DSK_LIB
CALL PUT_TXT
LD HL,#DOME_LIB0
;CALL INIT_LIB ;===========================-=-=-=---==-=-=-=-=-=-
LD HL,#TXT_READY
JP PUT_TXT
INIT_DISK_NOV:
LD HL,#0x7FF0
LD A,(HL)
CP #"K"
RET NZ
INC HL
LD A,(HL)
CP #"M"
RET NZ
INC HL
LD A,(HL)
CP #"c"
RET NZ
INC HL
LD A,(HL)
CP #"s"
RET NZ
LD HL,#TXT_NOV
CALL PUT_TXT
CALL 0x7FC8 ; GET UNIT ON LINE
PUSH DE
LD HL,#TXT_NOV_ON_W+1
CALL FIL_HL_A_HEX
POP DE
LD A,D
LD HL,#TXT_NOV_ID_W+1
CALL FIL_HL_A_HEX
LD HL,#TXT_NOV_ON
CALL PUT_TXT
LD HL,#TXT_NOV_ID
CALL PUT_TXT
RET
INIT_DISK_SCSI:
LD HL,#TXT_SCSI_LIST
CALL PUT_TXT
LD B,#7
INIT_SCSI_LOOP:
PUSH BC
PUSH BC
LD A,B
LD HL,#INIT_SCSI_BUF
CALL 0x7F92 ; TST UNIT RDY
INC D
DEC D
POP BC
JR NZ,INIT_SCSI_NEXT
LD HL,#TXT_SCSI_ID+1
LD A,B
PUSH AF
CALL FIL_HL_A_HEX
LD HL,#INIT_SCSI_BUF+5
LD DE,#TXT_SCSI_HD
LD BC,#31
LDIR
CALL INIT_SCSI_PUTTXT
INIT_SCSI_NEXT:
POP BC
DJNZ INIT_SCSI_LOOP
XOR A
LD HL,#INIT_SCSI_BUF
CALL 0x7F92 ; TST UNIT RDY
INC D
DEC D
RET NZ
LD HL,#TXT_SCSI_ID+1
XOR A
CALL FIL_HL_A_HEX
LD HL,#INIT_SCSI_BUF+5
LD DE,#TXT_SCSI_HD
LD BC,#31
LDIR
CALL INIT_SCSI_PUTTXT
RET
INIT_SCSI_BUF:
.ds 36
.db 0x0A,0x0D,0x1D
;--
.db 0
INIT_SCSI_PUTTXT:
LD A,(INIT_SCSI_PUTTXT-1)
OR A
LD HL,#TXT_SCSI_PUT
JP NZ,PUT_TXT
CPL
LD (INIT_SCSI_PUTTXT-1),A
LD HL,#TXT_SCSI_ID
JP PUT_TXT
;=========================================================================
INIT_SOUND:
LD HL,#TXT_SND_INIT
CALL PUT_TXT
CALL CHK_AUDIO ; FMPAC
CALL CHK_MUSIC ; MUSIC-MODULE
CALL CHK_OPL4 ; MOONSOUND
CALL LOAD_SAMC ; LOAD-SAMPLE
CALL LOAD_MUSC ; LOAD-MUSIC
RET
CHK_AUDIO:
LD IY,#CHIPS
LD HL,#TXT_FMPAC_FO
SET 0,(IY)
LD A,(0x0080)
BIT 3,A
JP NZ,PUT_TXT
RES 0,(IY)
LD HL,#TXT_FMPAC_SCAN
CALL PUT_TXT
CALL SRCFMP
LD A,C ; slt adr
LD HL,#TXT_FMPAC_WR
CALL PUT_SLT_ADR
LD HL,#DOME_VELD
LD A,(HL)
LD HL,#0x4000
CALL ENASLT ; MOET OMDAT IK HET SLTADR VERANDER ZONDER BIOS
LD HL,#DOME_VELD
CALL PUT_PAGE_FD
LD A,(CHIPS)
BIT 0,A
LD HL,#TXT_FMPAC_NO
JP Z,PUT_TXT
LD HL,#TXT_FMPAC_FOUND
JP PUT_TXT
;--
SRCFMP: LD HL,#0xFCCA
XOR A
LD B,#4
FMLP2: PUSH BC
LD B,#4
FMLP1: PUSH BC
PUSH AF
PUSH HL
SET 7,A
LD H,#0x40
PUSH AF ; SLT ADR
CALL 0x24
POP BC ; SLT ADR
POP HL
PUSH HL
LD A,(HL)
CP #0x20
CALL Z,FMTEST
JP Z,FMFND
POP HL
POP AF
ADD A,#4
AND #0x0F
INC HL
INC HL
INC HL
INC HL
POP BC
DJNZ FMLP1
ADD A,#1
AND #0x03
POP BC
DJNZ FMLP2
RET
FMTEST: LD HL,#0x401C
LD DE,#FMTEXT
LD C,B ; SLT ADR
LD B,#4
FMLP: LD A,(DE)
CP (HL)
RET NZ
INC HL
INC DE
DJNZ FMLP
CP A
RET
FMFND: POP AF
POP AF
POP AF
POP AF
LD A,(CHIPS)
SET 0,A
LD (CHIPS),A
RET
FMTEXT: .str "OPLL"
CHK_MUSIC:
LD HL,#TXT_CHKMUSMD
CALL PUT_TXT
IN A,(0xC0)
CP #255
LD HL,#TXT_NOMUS
JP Z,PUT_TXT ; GEEN MUSIC MOD
LD A,(CHIPS)
SET 1,A
LD (CHIPS),A
LD HL,#TXT_MUSFOUND
CALL PUT_TXT
LD HL,#TXT_SAMPLE_SCAN
CALL PUT_TXT
CALL CHK_MUSIC_MEM
LD HL,#TXT_SAMPLER_WR+1
CALL FIL_HL_DE_HEX
LD HL,#TXT_SAMPLE_RAM
CALL PUT_TXT
RET
CHK_MUSIC_MEM:
DI
CALL REG_INIT_1 ; WRITE
LD B,#8
CHK_MUSIC_MEMWR:
LD A,#15
OUT (0xC0),A ; REG 15
LD A,#"W"
OUT (0xC1),A ; SAMPLE DATA
.db 0,0,0,0
LD A,#9
OUT (0xC0),A
LD HL,#DATA_1+7
LD A,(HL)
ADD A,#32
LD (HL),A
OUT (0xC1),A
LD A,#11
OUT (0xC0),A
LD HL,#DATA_1+11
LD A,(HL)
ADD A,#32
LD (HL),A
OUT (0xC1),A
DJNZ CHK_MUSIC_MEMWR
CALL REG_INIT_2 ; READ
LD B,#8
CHK_MUSIC_MEMRD:
LD A,#15
OUT (0xC0),A ; REG 15
IN A,(0xC1)
LD C,#"W"
CP C
JP NZ,CHK_MUSIC_NOMEM
.db 0,0,0,0
LD A,#9
OUT (0xC0),A
LD HL,#DATA_2+7
LD A,(HL)
ADD A,#32
LD (HL),A
OUT (0xC1),A
LD A,#11
OUT (0xC0),A
LD HL,#DATA_2+11
LD A,(HL)
ADD A,#32
LD (HL),A
OUT (0xC1),A
DJNZ CHK_MUSIC_MEMRD
LD A,#4 ; REG 4
OUT (0xC0),A
LD A,#0x80 ; RESET ALLE VLAGGEN
OUT (0xC1),A
LD A,#7 ; REG 7
OUT (0xC0),A
LD A,#1 ; RESET ADPCM FUNCTION
OUT (0xC1),A
LD E,#0
LD D,A ; 0x0100
LD A,(CHIPS)
SET 2,A ; 256 KB FOUND
LD (CHIPS),A
EI
RET ; BACK TO BASIC
CHK_MUSIC_NOMEM:
LD A,#4 ; REG 4
OUT (0xC0),A
LD A,#0x80 ; RESET ALLE VLAGGEN
OUT (0xC1),A
LD A,#7 ; REG 7
OUT (0xC0),A
LD A,#1 ; RESET ADPCM FUNCTION
OUT (0xC1),A
LD A,B
SLA A
SLA A
SLA A ; *32
SLA A
SLA A
LD E,A
LD D,#0
EI
RET ; BACK TO BASIC
REG_INIT_1: LD B,#9
LD HL,#DATA_1
JR INIT_REG
REG_INIT_2: LD B,#9
LD HL,#DATA_2
INIT_REG: LD A,(HL)
OUT (0xC0),A ; OUT REG
INC HL
LD A,(HL)
OUT (0xC1),A ; OUT INHOUD
INC HL
DJNZ INIT_REG ; TILL B=0
RET
DATA_1:
.db 4,24
.db 7,1
.db 8,0
.db 9,0x1F ; FF
.db 10,0xFE ; ANDERS BIJ 2
.db 11,0x1F ; FF
.db 12,0xFF
.db 16,0xF0 ; 240
.db 7,0x60
DATA_2:
.db 4,24
.db 7,1
.db 8,0
.db 9,0x1F
.db 10,0xFE ; ANDERS BIJ 2
.db 11,0x1F
.db 12,0xFF ; ANDERS BIJ 2 (15)
.db 16,0xF0 ; 240
.db 7,0x20
;==========
CHK_OPL4:
LD HL,#TXT_CHKMOON
CALL PUT_TXT
LD A,(CHIPS)
BIT 3,A ; MOON FOUND
LD HL,#TXT_NOMOON
JP Z,PUT_TXT ; GEEN OPL4 ???
LD HL,#TXT_MOONFOUND
CALL PUT_TXT
CALL M_DRVINFO
PUSH HL ; MEM
LD HL,#TXT_MOON_VER_WR+1
LD (HL),A
INC HL
INC HL
LD (HL),D
INC HL
LD (HL),E
LD HL,#TXT_MOON_VER
CALL PUT_TXT
POP DE
LD HL,#TXT_MOON_MEM_WR+3
CALL FIL_HL_DE_HEX
LD HL,#TXT_MOON_MEM
CALL PUT_TXT
LD HL,#TXT_SORRYMOON
JP PUT_TXT
;============
LOAD_MUSC:
LD HL,#TXT_MUS_NONE
LD A,(CHIPS)
AND #0x0F
JP Z,PUT_TXT
LD HL,#TXT_MUS_LD
CALL PUT_TXT
LD A,#1
LD DE,#MUS
CALL M_MUSLOAD
; HIER MOETEN ALLE MUSIC WORDEN INGELADEN
LD HL,#TXT_READY
CALL PUT_TXT
RET
LOAD_SAMC:
LD A,(CHIPS)
BIT 3,A
JR NZ,LOAD_SAM_OPL4
BIT 1,A
LD HL,#TXT_SAM_NO
JP Z,PUT_TXT
BIT 2,A
JP NZ,LOAD_SAM_256KB
LD HL,#TXT_SAM_MUS
CALL PUT_TXT
LOAD_SAM_32KB:
LD HL,#TXT_SAM_L_32KB
CALL PUT_TXT
;CALL LOAD_SAM
LD HL,#TXT_READY
JP PUT_TXT
LOAD_SAM_256KB:
CALL LOAD_SAM_32KB
LD HL,#TXT_SAM_L_256KB
CALL PUT_TXT
;CALL LOAD_SAMJE
LD HL,#TXT_READY
CALL PUT_TXT
RET
LOAD_SAM_OPL4:
LD HL,#TXT_SAM_L_OPL4
CALL PUT_TXT
LD DE,#KIT
CALL M_KITLOAD
LD HL,#TXT_READY
CALL PUT_TXT
RET
MUS: .str "ATLANTIS.MWM"
.db 0
KIT: .str "ATLANTIS.MWK"
.db 0
;=========================================================================
INIT_LOAD:
; move from into => no effect
LD A,#255
LD (INT_ON),A
CALL INIT_INT
LD HL,#TXT_GFX_INIT
CALL PUT_TXT
LD HL,#TXT_GFX_LD
CALL PUT_TXT
LD HL,#PARAGON ; PARAGON LOGO VPAGE 1
LD DE,#0x4000
LD BC,#0x4000
LD A,#0
CALL LOAD
LD HL,#0x4000
LD DE,#0x8000
LD A,#0
CALL POP_UP_START
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#PRESENTS ; PRESENT VPAGE 2
LD DE,#0x4000
LD BC,#0x4000
LD A,#0
CALL LOAD
LD HL,#0x4000
LD DE,#0
LD A,#1
CALL POP_UP_START
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#DOME ; DOME VPAGE 3
LD DE,#0x4000
LD BC,#0x4000
LD A,#0
CALL LOAD
LD HL,#0x4000
LD DE,#0x8000
LD A,#1
CALL POP_UP_START
LD HL,#TXT_PUNT
CALL PUT_TXT
;-----
LD HL,#DOME_MENU
CALL PUT_PAGE_FD
LD HL,#MENU_GFX1 ; DOME MENU IN-GAME
LD DE,#0x5000
LD BC,#0x3000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#DOME_GFX_UNIT
LD A,(HL)
OR A
JP Z,NO_GFX_GAME
CALL PUT_PAGE_FD
; test failure due to to little mem
; LD HL,#MMENU
; LD DE,#0x4000
; LD BC,#0x2000
; LD A,#0
; CALL LOAD
; ld e,#0x0A
; ld c,#0x02
; call DOS
; ld e,#0x0D
; ld c,#0x02
; call DOS
; LD DE,#0x4000
;DUMP_LOOP22:
; LD A,(DE)
; PUSH DE
; CALL PUTHEX
; POP DE
; INC DE
; LD A,D
; CP #0x41
; JR NZ,DUMP_LOOP22
LD HL,#UNITTOT
LD DE,#0x4000
LD BC,#0x3000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#DOME_GFX_BLPA
LD A,(HL)
OR A
JR Z,NO_GFX_GAME
CALL PUT_PAGE_FD
LD HL,#BALKEN4
LD DE,#0x4000
LD BC,#0x1000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#PAGE5
LD DE,#0x6000
LD BC,#0x2000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#DOME_MMENU
LD A,(HL)
OR A
JR Z,NO_GFX_GAME
CALL PUT_PAGE_FD
LD HL,#ST_MENU1
LD DE,#0x6000
LD BC,#0x1000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#ST_MENU2
LD DE,#0x7000
LD BC,#0x1000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
NO_GFX_GAME:
LD HL,#DOME_VELD
CALL PUT_PAGE_FD
;-------
LD HL,#TXT_GFX_READY
CALL PUT_TXT
LD HL,#TXT_STUFF_LD
CALL PUT_TXT
;LD HL,#DOME_MMENU
;LD A,(HL)
;OR A
;CALL NZ,PUT_PAGE_FD
;CALL PUT_PAGE_FD
LD HL,#MMENU
LD DE,#0x4000
LD BC,#0x2000
LD A,#0
CALL LOAD
LD HL,#TXT_PUNT
CALL PUT_TXT
LD HL,#TXT_STUFF_READY
CALL PUT_TXT
LD HL,#TXT_RUN
CALL PUT_TXT
ld e,#0x0A
ld c,#0x02
call DOS
ld e,#0x0D
ld c,#0x02
call DOS
LD DE,#0x4000
DUMP_LOOP:
LD A,(DE)
PUSH DE
CALL PUTHEX
POP DE
INC DE
LD A,D
CP #0x41
JR NZ,DUMP_LOOP
RET
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
;=========================================================================
DO_INTRO:
;CALL INTRO_WAIT
;CALL INTRO_WAIT
CALL SCREEN_OFF
CALL SPRITES_OFF
LD HL,#COLOR_PARAGON
CALL PUT_COLOR
CALL SET_SCREEN5
LD A,#63 ; VPAGE 1
CALL SET_PAGE
CALL SCREEN_ON
LD B,#40
CALL INTRO_WAIT
CALL INTRO_WAIT
CALL INTRO_WAIT
;LD HL,#COLOR_PRESENTS ; now equals to paragon colors
;CALL PUT_COLOR
LD A,#95 ; VPAGE 2
CALL SET_PAGE
LD B,#40
CALL INTRO_WAIT
LD HL,#COLOR_DOME_LOGO
CALL PUT_COLOR
LD A,#127
CALL SET_PAGE ; VPAGE 3
LD B,#20
CALL INTRO_WAIT
JP 0x4000
INTRO_WAIT:
IN A,(0xAA) ; check op spatie...
AND #0xF0
OR #8
OUT (0xAA),A
IN A,(0xA9)
AND #1
RET Z
EI
HALT
HALT
HALT
HALT
DJNZ INTRO_WAIT
RET
;=========================================================================
;=========================================================================
;=================== SUBS ==============================================
;=========================================================================
;=========================================================================
PUT_SLT_ADR:
LD D,A
AND #0b00000011
LD B,#48
ADD B
LD (HL),A
BIT 7,D
RET Z ; PRIM NOT IN SUB SLOT ???
INC HL
LD A,#0x2D ; "-"
LD (HL),A
LD A,D
AND #0b00001100
SRL A
SRL A
LD B,#48
ADD B
INC HL
LD (HL),A
RET
;=======================================================================
;-------------------------
; IN DE: NR
; HL ; WELKE TXT + 3
FIL_HL_DE_HEX:
LD A,E
AND #0b00001111
LD B,#48
ADD B
CP #58
JP C,FIL_HL_DE1_HEX
LD B,#7
ADD B
FIL_HL_DE1_HEX:
LD (HL),A
DEC HL
LD A,E
AND #0b11110000
SRL A
SRL A
SRL A
SRL A
LD B,#48
ADD B
CP #58
JP C,FIL_HL_DE2_HEX
LD B,#7
ADD B
FIL_HL_DE2_HEX:
LD (HL),A
DEC HL
LD A,D
AND #0b00001111
LD B,#48
ADD B
CP #58
JP C,FIL_HL_DE3_HEX
LD B,#7
ADD B
FIL_HL_DE3_HEX:
LD (HL),A
DEC HL
LD A,D
AND #0b11110000
SRL A
SRL A
SRL A
SRL A
LD B,#48
ADD B
CP #58
JP C,FIL_HL_DE4_HEX
LD B,#7
ADD B
FIL_HL_DE4_HEX:
LD (HL),A
RET
;=======================================================================
;-------------------------
; IN A: NR
; HL ; WELKE TXT + 1
FIL_HL_A_DEC:
JR DIE
LD B,A
XOR A ; FLAGS GOED
LD A,B
DAA
LD B,A
AND #0x0F
ADD #48
LD (HL),A
DEC HL
LD A,B
SRL A
SRL A
SRL A
SRL A
ADD #48
LD (HL),A
RET
DIE:
PUSH HL
LD HL,#FIL_HL_A_TAB_DEC
SLA A
LD E,A
LD D,#0
ADD HL,DE
LD D,(HL)
INC HL
LD E,(HL)
POP HL
LD (HL),E
DEC HL
LD (HL),D
DEC HL
RET
FIL_HL_A_TAB_DEC:
.str "0001020304050607080910111213141516171819"
.str "2021222324252627282930313233343536373839"
.str "4041424344454647484950515253545556575859"
.str "6061626364656667686970717273747576777879"
.str "8081828384858687888990919293949596979899"
;----------------------------
; IN A: NR
; HL : TXT +1
FIL_HL_A_HEX:
LD D,A
AND #0b00001111
LD B,#48
ADD B
CP #58
JP C,FIL_HL_A1_HEX
LD B,#7
ADD B
FIL_HL_A1_HEX:
LD (HL),A
DEC HL
LD A,D
AND #0b11110000
SRL A
SRL A
SRL A
SRL A
LD B,#48
ADD B
CP #58
JP C,FIL_HL_A2_HEX
LD B,#7
ADD B
FIL_HL_A2_HEX:
LD (HL),A
RET
READ_MOUSE:
LD A,#15
OUT (0xA0),A
LD A,C
OUT (0xA1),A
XOR #0b00110000
LD C,A
LD A,#14
OUT (0xA0),A
READ_MOUSE_L:
DJNZ READ_MOUSE_L
LD A,(MOUSE_WAIT2)
LD B,A
IN A,(0xA2)
AND #0x0F
RET
;=======================================================================
;=======================================================================
;=======================================================================
;================== TAB ================================================
;=======================================================================
;=======================================================================
DOS_STACK: .dw 0
INT_DOS: .dw 0
INT_SPEED: .dw I_SPEED
CURRENT_DRIVE: .db 0
DOME_LIB0: .str "DOME 000" ; DOME LIB FILE
UNITTOT: .str "UNITTOT ZOP" ; GFX UNITS
PAGE5: .str "PAGE5 ZOP" ; GFX BUILDINGS
BALKEN4: .str "BALKEN4 ZOP" ; GFX ACHTERGROND
MMENU: .str "MMENU DAT" ; MAIN MENU 0x4000
ST_MENU1: .str "ST_MENU1ZOP" ; GFX START MENU
ST_MENU2: .str "ST_MENU2ZOP" ; GFX START MENU_ROOD
MENU_CODE: .str "MENU DAT" ; DOME_MENU_CALL CODE
MENU_GFX1: .str "MENU ZOP" ; DOME_MENU_CALL GFX
CHOOSE_CODE: ;DB "CHOOSE DAT" ; LEVEL CHOOSER CODE
CHOOSE_GFX1: ;DB "CHOOSE1 ZOP" ; LEVEL CHOOSEE GFX1
CHOOSE_GFX2: ;DB "CHOOSE2 ZOP" ; LEVEL CHOOSER GFX2
PARAGON: .str "PARAGON ZOP" ; GFX PARAGON PRODUCTIOS
PRESENTS: .str "PRESENTSZOP" ; GFX PRESENTS (C) 1999
DOME: .str "DOME ZOP" ; GFX DOME LOGO
DOSVARTAB: .dw 0 ; adr mappertab
;DOSJMPTAB: .dw 0
DOS_TOTAL_LOC: .db 0 ; AANTAL SEGEMNSTENM
SEC_SLOT_ADR: .db 0
DOS_MAX_LOC: .db 13 ; MOET MINMAAL 5 ZIJN !!!!!!!!
DOS_LOC_PRIM: .db 0
DOS_LOC_SEC: .db 0
COLOR_PARAGON:
.db #0x00,#0x00,#0x77,#0x07,#0x66,#0x06,#0x11,#0x01
.db #0x55,#0x05,#0x44,#0x04,#0x33,#0x03,#0x22,#0x02
.db #0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00
.db #0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00
COLOR_PRESENTS:
.db #0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00
.db #0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00,#0x00
.db #0x00,#0x00,#0x11,#0x01,#0x22,#0x02,#0x33,#0x03
.db #0x44,#0x04,#0x55,#0x05,#0x66,#0x06,#0x77,#0x07
COLOR_DOME_LOGO:
.db #0x00,#0x00,#0x04,#0x00,#0x05,#0x00,#0x06,#0x00
.db #0x55,#0x05,#0x33,#0x03,#0x20,#0x00,#0x30,#0x00
.db #0x40,#0x00,#0x70,#0x03,#0x70,#0x04,#0x70,#0x05
.db #0x70,#0x00,#0x60,#0x00,#0x50,#0x00,#0x77,#0x07
;=======================================================================
;=======================================================================
;=======================================================================
;================== TXT ================================================
;=======================================================================
;=======================================================================
TXT_PUNT: .str "."
.db 0x1D
TXT_READY: .str "Ready"
TXT_RET: .db 0x0A,0x0D,0x1D
TXT_DOME_INIT: .str "INIT_DOME : DOME v0.7b BETA"
.db 0x0A,0x0D,0x1D
TXT_ERR: .str "PRESS SPACE 4 DOS......................"
.db 0x0A,0x0D,0x1D
;======== TIME / DATE
TXT_TIME: .str "INIT_TIME : Current time : "
TXT_TIME_WR: .str " : : "
.db 0x0A,0x0D,0x1D
TXT_DATE: .str "INIT_DATE : Current date : "
TXT_DATE_WR: .str " - - "
.db 0x0A,0x0D,0x1D
; sun 24-12-1998
;=========== MSX_TYPE TXT'S
TXT_MSX_TYPE: .str "CHK_SYS : "
.db 0x1D
TXT_MSX_1: .str "MSX-1 Found."
.db 0x0A,0x0D,0x1D
TXT_MSX_2: .str "MSX-2 Found."
.db 0x0A,0x0D,0x1D
TXT_MSX_2P: .str "MSX-2+ Found."
.db 0x0A,0x0D,0x1D
TXT_MSX_TR: .str "MSX-TURBO-R Found."
.db 0x0A,0x0D,0x1D
TXT_MSX_ON: .str "MSX-3 Found ,let us know it's name."
.db 0x0A,0x0D,0x1D
;========== MOUSE TXT'S
TXT_MOUSE_CHK: .str "CHK_MOUSE : Scaning Game Ports..."
.db 0x0A,0x0D,0x1D
TXT_MOUSE_YES: .str " Mouse found on port : "
.db 0x1D
TXT_MOUSE_PORT1:.str "1 "
.db 0x1D
TXT_MOUSE_PORT12:.str "1 AND #"
TXT_MOUSE_PORT2:.str "2"
.db 0x0A,0x0D,0x1D
TXT_MOUSE_NO: .str " No mouse found"
.db 0x0A,0x0D,0x1D
TXT_MOUSE_ERR: .str "You need a mouse connected on port 1 or #2 to "
.str "run DOME."
.db 0x0A,0x0D,0x1D
TXT_MOUSE_FO: .str "CHK_MOUSE : MOUSE IS FORCED BY USER ON PORT : "
.db 0x1D
;=================== vdp
TXT_VDP_SCAN: .str "CHK_VDP : Checking VDP type."
.db 0x0A,0x0D,0x1D
TXT_VDP_38: .str " Found V9938 environment."
.db 0x0A,0x0D,0x1D
TXT_VDP_58: .str " Found V9958 environment."
.db 0x0A,0x0D,0x1D
TXT_VDP_90: .str " Found V9990 environment."
.db 0x0A,0x0D,0x1D
TXT_VDP_90_NOT: .str " Sorry V9990 Not supported."
.db 0x0A,0x0D,0x1D
TXT_VDP_NOT: .str " Found unknown VDP environment."
.db 0x0A,0x0D
.db 0x1D
TXT_VDP_ID: .str " VDP indication number: &H"
TXT_VDP_ID_WR: .str " "
.db 0x0A,0x0D,0x1D
;============= CPU
TXT_CPU: .str "CHK_CPU : "
.db 0x1D
TXT_Z80: .str "Z80"
.db 0x0A,0x0D,0x1D
TXT_R800_ROM: .str "R800 ROM"
.db 0x0A,0x0D,0x1D
TXT_R800_DRAM: .str "R800 DRAM"
.db 0x0A,0x0D,0x1D
TXT_R800_DOME: .str " Switching to R800 ROM."
.db 0x0A,0x0D,0x1D
TXT_Z180: .str "Z180"
.db 0x0A,0x0D,0x1D
TXT_Z280: .str "Z280 (Z800)"
.db 0x0A,0x0D,0x1D
TXT_Z380: .str "Z380"
.db 0x0A,0x0D,0x1D
TXT_SPEED: .str " CPU_Speed : &H"
TXT_SPEED_WR: .ds 32 ; 128 bit counter
.db 0x0A,0x0D,0x1D
;============= memory TXT'S
TXT_MEMORY: .str "INIT_MEM : Current manager : "
.db 0x1D
TXT_MEMMAN: .str "Memman & "
.db 0x1D
TXT_DOS: .str "Dos "
.db 0x1D
TXT_DOS1: .str "You need dos 2.XX or higher to "
.str "run DOME."
.db 0x0A,0x0D,0x1D
TXT_VERSION: .str "2.XX"
.db 0x0A,0x0D,0x1D
TXT_ALO: .str " Alocating memory... "
.db 0x0A,0x0D,0x1D
TXT_MORE_MEM: .str " You need at least 1 more segment to"
.str " run Dome."
.db 0x0A,0x0D,0x1D
TXT_MAX_MEM: .str " You have the maximum memory than current "
.str "is used in Dome."
.db 0x0A,0x0D,0x1D
TXT_MEM_MAPP: .str " Current mapper breedte :"
TXT_MEM_MAPP_WR:.str " "
.db 0x0A,0x0D,0x1D
;========= DOS TXT'S
TXT_DOSJMPTAB: .str " Preparing Dos Jump Table"
.db 0x0A,0x0D,0x1D
TXT_DOSVARTAB: .str " Getting Dos Info Table"
.db 0x0A,0x0D,0x1D
TXT_DOS_PRI: .str " Primary mapper found at slot : "
TXT_DOS_PRI_SLT:.str " "
.db 0x0A,0x0D,0x1D
TXT_DOS_SEC: .str " Next mapper found at slot : "
TXT_DOS_SEC_SLT:.str " "
.db 0x0A,0x0D,0x1D
TXT_DOS_NO_SEC: .str " No More Mappers found."
.db 0x0A,0x0D,0x1D
TXT_DOS_MAX_PRI:.str " No more segment's needed from primary mapper"
.db 0x0A,0x0D,0x1D
TXT_DOS_MAX_SEC:.str " No more segment's needed from other mappers"
.db 0x0A,0x0D,0x1D
TXT_DOS_NOT_MAX:.str " Dome supports more segment's than current"
.str " is showen."
.db 0x0A,0x0D,0x1D ; NAX = NOT MAX :)
TXT_DOS_PRI_LOC:.str " Segment's located by primary mapper......"
TXT_DOS_PRI_WR: .str " "
.db 0x0A,0x0D,0x1D
TXT_DOS_SEC_LOC:.str " Segment's located by other mapper........"
TXT_DOS_SEC_WR: .str " "
.db 0x0A,0x0D,0x1D
TXT_DOS_TOT_LOC:.str " Total segment's located.................."
TXT_DOS_TOT_WR: .str " "
.db 0x0A,0x0D,0x1D
;=============== DISK TXT'S
TXT_DSK_INIT: .str "INIT_BDOS : Getting current disk values."
.db 0x0A,0x0D,0x1D
TXT_DSK_DRV: .str " Current Drive-letter : "
TXT_DSK_DRV_WR: .str " :"
.db 0x0A,0x0D,0x1D
TXT_DSK_ROM: .str " DISK-ROM Found at Slot : "
TXT_DSK_ROM_WR: .str " "
.db 0x0A,0x0D,0x1D
TXT_SCSI: .str " Found MSX-SCSI Bios."
.db 0x0A,0x0D,0x1D
TXT_NOV: .str " NOVAXIS SCSI-bios instaled."
.db 0x0A,0x0D,0x1D
TXT_NOV_ID: .str " SCSI-Host ID : "
TXT_NOV_ID_W: .str " "
.db 0x0A,0x0D,0x1D
TXT_NOV_ON: .str " Total SCSI Units Online : "
TXT_NOV_ON_W: .str " "
.db 0x0A,0x0D,0x1D
TXT_SCSI_LIST: .str " SCSI-BUS : "
.db 0x1D
TXT_SCSI_PUT: .str " "
TXT_SCSI_ID: .str " -"
TXT_SCSI_HD: .str " "
.db 0x0A,0x0D,0x1D
TXT_DSK_LIB: .str " Loading First DOME lib..."
.db 0x1D
TXT_SCSI_NOT: .str " NOT SCANNING SCSI DEV. BY USER"
.db 0x0A,0x0D,0x1D
;=============== SOUND'S TXT'S
TXT_SND_INIT: .str "INIT_snd : installing dome sound system"
.db 0x0A,0x0D,0x1D
TXT_MUS_NONE: .str " Sorry no music loaded ,You need at least 256KB MEMORY"
.db 0x0A,0x0D,0x1D
TXT_MUS_LD: .str " Loading game music...."
.db 0x1D
;============= FM-PAC
TXT_FMPAC_SCAN: .str " Searching for FM-PAC."
.db 0x0A,0x0D,0x1D
TXT_FMPAC_FOUND:.str " FM-PAC Found at Slot : "
TXT_FMPAC_WR: .str " "
.db 0x0A,0x0D,0x1D
TXT_FMPAC_NO: .str " FM-PAC Not Found."
.db 0x0A,0x0D,0x1D
TXT_FMPAC_FO: .str " FM-PAC IS FORCED BY USER."
.db 0x0A,0x0D,0x1D
;========= MUSIC TXT'S
TXT_CHKMUSMD: .str " Checking for Music Module."
.db 0x0A,0x0D,0x1D
TXT_MUSFOUND: .str " Music Module found."
.db 0x0A,0x0D,0x1D
TXT_NOMUS: .str " No Music Module Found."
.db 0x0A,0x0D,0x1D
TXT_SAMPLE_SCAN:.str " Scanning Sample ram."
.db 0x0A,0x0D,0x1D
TXT_SAMPLE_RAM: .str " Total sample ram in Kbytes......&H"
TXT_SAMPLER_WR: .str " "
.db 0x0A,0x0D,0x1D
;================= MOON SOUND
TXT_CHKMOON: .str " Checking for Moonsound."
.db 0x0A,0x0D,0x1D
TXT_MOONFOUND: .str " Moonsound Found."
.db 0x0A,0x0D,0x1D
TXT_NOMOON: .str " No Moonsound Found."
.db 0x0A,0x0D,0x1D
TXT_SORRYMOON: .str " Sorry no Moonsound support yet."
.db 0x0A,0x0D,0x1D
TXT_MOON_VER: .str " MBWAVE-driver version :"
TXT_MOON_VER_WR:.str " 0.00"
.db 0x0A,0x0D,0x1D
TXT_MOON_MEM: .str " MOONSOUND Sram in Kb : &H"
TXT_MOON_MEM_WR:.str "0000"
.db 0x0A,0x0D,0x1D
;============== SAMPLE LOADING
TXT_SAM_NO: .str " No Samples are Loaded."
.db 0x0A,0x0D,0x1D
TXT_SAM_MUS: .str " There will be only music samples"
.db 0x0A,0x0D,0x1D
TXT_SAM_L_32KB: .str " Loading music samples....."
.db 0x1D
TXT_SAM_L_256KB:.str " Loading game Samples......"
.db 0x1D
TXT_SAM_L_OPL4: .str " Loading game and music samples..."
.db 0x1D
;============== GFX INIT THE LAST AT LEAST
TXT_GFX_INIT: .str "INIT_GFX : Checking Memory for total pre-LOAD'S"
.db 0x0A,0x0D,0x1D
TXT_GFX_LD: .str " LOADING GFX : ["
.db 0x1D
TXT_STUFF_READY:
TXT_GFX_READY: .str "]"
.db 0x0A,0x0D,0x1D
TXT_STUFF_LD: .str " LOADING STUFF : ["
.db 0x1D
TXT_RUN: .str " GET READY TO ROCK !"
.db 0x0A,0x0D,0x1D
.area _DATA