Код:
MODULE Boot
CLEAR = #fd
NUMBER = #0e
RANDOMIZE = #f9
USR = #c0
REM = #ea
ENTER = #0d
TR_DOS = #3d13
MACRO FINDFILE FileName, Loader_TRDSEC, Loader_LEN
ld de,FileName
call FindFile
set 2,l
ld a,(hl)
ld (Loader_LEN),a
inc hl
ld e,(hl)
inc hl
ld d,(hl)
ld (Loader_TRDSEC),de
ENDM
BasicStart:
Line1:
db #00, #01
dw Line1End - Line1Start
Line1Start:
db CLEAR, "0", NUMBER, #00, #00: dw #5fff: db #00, ":", RANDOMIZE, USR, "0", NUMBER, #00, #00: dw BootCode: db #00, ":", REM
BootCode:
xor a
ld (#8800),a
out (#0fe),a
ld hl,#4000
ld de,#4001
ld bc,#1800
ld (hl),l
ldir
ld (hl),#08
ld bc,#2ff
ldir
ld hl,#8000
ld de,#0000
ld bc,#0805
call TR_DOS
IFDEF IncludePicture
FINDFILE SCRFileName, SCR_TRKSEC, SCR_LEN
ENDIF
FINDFILE Page5FileName, Page5_TRKSEC, Page5_LEN
FINDFILE CodeFileName, Code_TRKSEC, Code_LEN
FINDFILE Page1FileName, Page1_TRKSEC, Page1_LEN
FINDFILE Page3FileName, Page3_TRKSEC, Page3_LEN
FINDFILE Page4FileName, Page4_TRKSEC, Page4_LEN
IFDEF IncludePicture
SCR_TRKSEC = $ + 1
ld de,#0000
SCR_LEN = $ + 2
ld bc,#0005
ld hl,#4000
call TR_DOS
ENDIF
Page5_TRKSEC = $ + 1
ld de,#0000
Page5_LEN = $ + 2
ld bc,#0005
ld hl,#6000
call TR_DOS
Code_TRKSEC = $ + 1
ld de,#0000
Code_LEN = $ + 2
ld bc,#0005
ld hl,EntryPoint
call TR_DOS
di
ld bc,#7ffd
ld a,#11
out (c),a
Page1_TRKSEC = $ + 1
ld de,#0000
Page1_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
di
ld bc,#7ffd
ld a,#13
out (c),a
Page3_TRKSEC = $ + 1
ld de,#0000
Page3_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
di
ld bc,#7ffd
ld a,#14
out (c),a
Page4_TRKSEC = $ + 1
ld de,#0000
Page4_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
ld sp,STACK
ei
jp EntryPoint
SCRFileName:
db "sab2_$ C"
Page5FileName:
db "sab2_5 C"
CodeFileName:
db "sab2_0 C"
Page1FileName:
db "sab2_1 C"
Page3FileName:
db "sab2_3 C"
Page4FileName:
db "sab2_4 C"
FindFile:
ld hl,#8000
.find_loop:
ld a,(hl)
and a
jr z,.file_not_found
ld b,#09
push de
.check_name_loop:
ld a,(de)
cp (hl)
jr nz,.next_file
inc de
inc hl
djnz .check_name_loop
pop de
ret
.next_file:
pop de
ld a,l
and #f0
add #10
ld l,a
jr nc,.find_loop
inc h
jr .find_loop
.file_not_found:
rst #08
db #1a
db ENTER
dw #0000
Line1End:
BasicEnd:
ENDMODULE