DemoN/loadbin.asm
2024-08-08 14:52:38 +03:00

206 lines
3.8 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

MODULE LOADBIN
LoadBinDialog
ld ix,.LoadBinWnd
call DialogWindow
ret
.LoadBinEditFN
;ld hl,.LoadBinFileName
;ld c,20
;call InputLine.ToBuffer
.L003 ld hl,#0f24
ld b,20
call KEYB.InputLine1
jr c,LoadBinDialog
ld a,c
and a
jr z,.L003
ld (.filenamelen),a
push bc
ld de,.LoadBinFileName
call KEYB.InputLine.FromBuffer
pop bc
ld a,20
sub c
jr z,.L001
ld b,a
ld a,32
.L002 ld (de),a
inc de
djnz .L002
.L001 jr LoadBinDialog
.EditAddres
ld hl,0x1021
ld b,5
call KEYB.InputLine1
jr c,LoadBinDialog
push bc
call KEYB.PutAddress
pop bc
jr c,.EditAddres
ld (.LoadToAdr),hl
ld de,.AdresTxt
call KEYB.InputLine.FromBuffer
jr LoadBinDialog
.EditLenght
ld hl,0x1031
ld b,5
call KEYB.InputLine1
jr c,LoadBinDialog
push bc
call KEYB.PutAddress
pop bc
jr c,.EditLenght
ld (.LoadLen),hl
ld de,.LenTxt
call KEYB.InputLine.FromBuffer
jr LoadBinDialog
.LoadBIN
xor a
ld (ClockOn),a
ld c,Dss.Open
ld hl,.LoadBinFileName
push hl
ld a,(.filenamelen)
ld d,0
ld e,a
add hl,de
ld (.restadr+1),hl
ld (hl),0
pop hl
ld a,1
rst DssRst
jp c,.Err1
.restadr ld hl,0
ld (hl),32
ld (.FMid),a
ld hl,(.LoadToAdr)
ld a,1 ; адрес в области #0000-7fff?
bit 7,h
jr z,.adr0000
inc a ; #8000-#bfff?
bit 6,h
jr z,.adr
inc a ; #c000-ffff !!!
jr .adr
.adr0000 bit 6,h
jr nz,.adr
sub a
.adr ld (.bank),a
set 6,h ; адрес загрузки =>#4XXX
res 7,h
ld (.LoadFirst+4),hl
push hl
ld hl,0 ; Узнаем длину файла
ld ix,0
ld b,2
ld c,Dss.Move_FP
rst DssRst
ld (.LoadLen),hl
ld (.LoadEnd+1),hl
pop hl
.Load00 and a
ex hl,de
ld de,#8000
sbc hl,de
ld (.LoadFirst+1),hl
ld de,(.LoadEnd+1)
and a
sbc hl,de
jr c,.LoadEnd
.LoadFirst ld de,0 ; количество байт, которые надо считать в первую банку
ld hl,0 ; адрес, куда скачать
.LoadNext call .Bank1
ld c,Dss.Read
ld a,(.FMid)
rst DssRst
jr c,.Err
ld hl,.bank
inc (hl)
ld hl,(.LoadEnd+1)
ld de,#4000
and a
sbc hl,de
jr c,.LoadEnd ; Осталось меньше 16Кб
ld (.LoadEnd+1),hl
ld hl,#4000
ld de,#4000
jr .LoadNext
.LoadEnd ld de,0 ; количество байт, которые необходимо дочитать
call .Bank1
ld hl,#4000
ld a,(.FMid)
ld c,Dss.Read
rst DssRst
jr c,.Err
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
ld hl,(.LoadToAdr)
ld (ListAddr),hl
ld a,(WinPage+1)
out (EmmWin.P1),a
ret
.Err push af
ld a,(.FMid)
ld c,Dss.Close
rst DssRst
pop af
.Err1
ei
call ErDss
ld c,Dss.PChars ; вывод текста ошибки и ожидания any key
rst DssRst
ld c,Dss.WaitKey
rst DssRst
ret
.Bank1 push hl
push de
ld a,(.bank)
ld l,a
ld h,0
ld de,WinPage
add hl,de
ld a,(hl)
out (EmmWin.P1),a
pop de
pop hl
ret
.bank db 0
.FMid db 0
.filenamelen
db 0
.LoadToAdr dw 0x4000
.LoadLen dw 0x1000
.LoadBinWnd db 2,23,13,36,6,7
db "Load BIN-file",0
db "Filename: "
.LoadBinFileName
ds 20,32
db 0x0D
db "Addres: "
.AdresTxt db "#4000 Lenght: "
.LenTxt db "#1000"
db 0x16,10+23,4+13,"OK Cancel",0
db 5
db 35,15,22,2 ; Filename
dw 0,.LoadBinEditFN
db 32,16,7,2 ; Address
dw 0,.EditAddres
db 48,16,7,2 ; Lenght
dw 0,.EditLenght
db 30,17,8,2 ; OK
dw 0,.LoadBIN
db 41,17,8,2 ; Cancel
dw 0,0
ENDMODULE