DemoN/FILE.ASM
2020-12-26 23:59:23 +03:00

275 lines
12 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;[]=========================================================================[]
;[] ” ©«®¢ë¥ ¯à®æ¥¤ãàë ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 27.08.2006 []
;[]=========================================================================[]
LoadFile:
xor a ;¢ëª« ç á®¢
ld (ClockOn),a
ld bc,0x0100+Dss.SelPage ;á¨á⥬­ë© íªà ­
rst DssRst
ld hl,Str.Load ;á®®¡é¥­¨¥ ® § £à㧪¥ ä ©« 
ld c,Dss.PChars
rst DssRst
call LoadExe
ld a,(DemonScreen)
ld b,a
ld c,Dss.SelPage
rst DssRst
ld a,On ;¢ª« ç á®¢
ld (ClockOn),a
ret
LoadExe:
ld hl,FDebug ;¨¬ï ä ©« 
ld a,1 ;®âªàëâì ¤«ï ç⥭¨ï
ld c,Dss.Open
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (FId),a ;§ ¯®¬­¨âì ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld hl,FDebug ;¡ãä¥à ¤«ï § £à㧪¨ § £®«®¢ª 
ld de,0x7F ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld c,Dss.Read ;ç⥭¨¥
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld hl,(FDebug) ;§ £®«®¢®ª EXE-ä ©« 
ld de,0x5845 ;'EX' ¯à®¢¥àª  ¨¤¥­â¨ä¨ª â®à 
sbc hl,de
jr nz,.L1
ld hl,FDebug+3
ld a,(hl) ;¢¥àá¨ï EXE-ä ©« 
or a
jr nz,.L1
inc hl
ld e,(hl) ;­ ç «® ¨á¯®«­ï¥¬®£® ª®¤ 
inc hl
ld d,(hl)
ld bc,11 ;¯à®¯ã᪠¥¬ ä« £ § £àã§ç¨ª  ¨ § à¥§¥à¢¨à®¢ ­­ë¥ ¡ ©âë
add hl,bc
ld a,(hl) ;¬«.¡ ©â à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
ld (FRam),a
inc hl
ld a,(hl) ;áâ.¡ ©â à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨
ld (FRam+1),a
inc hl
ld a,(hl) ;¬«.¡ ©â  ¤à¥á  § ¯ã᪠
ld (Reg._PC),a
ld (ListAdr),a ;¬«.¡ ©â  ¤à¥á  «¨á⨭£ 
inc hl
ld a,(hl) ;áâ.¡ ©â  ¤à¥á  § ¯ã᪠
ld (Reg._PC+1),a
ld (ListAdr+1),a ;áâ.¡ ©â  ¤à¥á  «¨á⨭£ 
inc hl
ld a,(hl) ;¬«.¡ ©â á⥪  ¯à®£à ¬¬ë
ld (Reg._SP),a
inc hl
ld a,(hl) ;áâ.¡ ©â á⥪  ¯à®£à ¬¬ë
ld (Reg._SP+1),a
ld a,e
ld (.L2+2),a
ld a,d
ld (.L2+3),a
.L1 ld hl,0
ld ix,0 ;ᬥ饭¨¥ ¢ ä ©«¥
ld bc,2*256+Dss.Move_FP ;®â­®á¨â¥«ì­® ª®­æ 
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
push hl
ld de,(FRam) ; ¤à¥á à á¯®«®¦¥­¨ï ª®¤ 
set 6,d
res 7,d ;£à㧨¬ ç¥à¥§ 1-¥ ®ª­®
ld hl,0x8000
or a ;á¡à®á¨âì ä« £ C
sbc hl,de ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld (.L6+1),hl
ex de,hl
ld (.L6+4),hl
pop hl
call NBank ;®¯à¥¤¥«¨âì ª®«-¢® ¡ ­®ª
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (MemId+1),a ;ª®«-¢® ¢ë¤¥«ï¥¬ëå áâà ­¨æ
ld b,a
ld c,Dss.GetMem ;¢ë¤¥«¥­¨¥ ¯ ¬ïâ¨
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld (MemId),a ;id ¡«®ª  ¯ ¬ïâ¨
ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld hl,0
.L2 ld ix,0 ;ᬥ饭¨¥ ¢ ä ©«¥
ld bc,Dss.Move_FP ;®â­®á¨â¥«ì­® ­ ç « 
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,Dss.SetWin1 ;¢ª« 1-î ¡ ­ªã ¢ 1-¥ ®ª­®
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
.L6 ld de,0x3FFF ;ª®«-¢® áç¨â뢠¥¬ëå ¡ ©â
ld hl,0x4000 ; ¤à¥á § £à㧪¨ ª®¤ 
ld a,1 ;áç¥â稪 ¡ ­®ª
ld (MemId+2),a
.L5 ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld c,Dss.Read ;ç⥭¨¥
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld bc,(MemId+1)
ld a,b
cp c ;§ £à§¨«¨ ¢¥áì ä ©«?
jr z,.L4 ;¯¥à¥å®¤, ¥á«¨ ¤ 
inc a
ld (MemId+2),a ;㢥«¨ç¨âì áç¥â稪 ¡ ­®ª
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld c,Dss.SetWin1 ;¢ª« ¡ ­ªã ¢ 1-¥ ®ª­®
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld hl,0x4000 ; ¤à¥á ¢ ¯ ¬ï⨠¤«ï § £à㧪¨
ld de,0x3FFF ;ª®«-¢® § £à㦠¥¬ëå ¡ ©â
jr .L5
.L4 ld a,(FId) ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
ld c,Dss.Close ;§ ªàëâì ä ©«
rst DssRst
jp c,PrErDss ;¢ë室 á ®è¨¡ª®©
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 1-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
dec a
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,1*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 2-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+1),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
cp 2
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,2*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 3-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+2),a
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
cp 3
jr z,.L7
ld a,(MemId) ;id ¡«®ª  ¯ ¬ïâ¨
ld bc,3*256+Bios.Emm_Fn4 ;¢ëç¨á«¨âì 䨧 ­®¬¥à 4-© ¡ ­ª¨
rst BiosRst
ret c ;¢ë室 á ®è¨¡ª®©
ld (BankP+3),a
.L7 ld hl,WinPage
ld de,BankP
ld a,(MemId+1) ;ª®«-¢® ¢ë¤¥«¥­­ëå áâà ­¨æ
ld b,a
cp 5
jr c,$+4
ld b,4 ;¯®¤ª«îç ¥¬ ­¥ ¡®«¥¥ 4 ¡ ­®ª
ld a,(FRam+1) ;áâ. ¤à¥á à á¯®«®¦¥­¨ï ª®¤ 
and 0xC0 ;®ª­® á à á¯®«®¦¥­¨¥¬ ª®¤ 
or a ;0-¥ ®ª­®
jr nz,.L8
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L8 inc hl
cp 0x40 ;1-¥ ®ª­®
jr nz,.L9
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L9 inc hl
cp 0x80 ;2-¥ ®ª­®
jr nz,.L10
ld c,a
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
dec b
ret z ;¢ë室, ¥á«¨ ¡®«ìè¥ ­¥â ¡ ­®ª
ld a,c
inc de
.L10 inc hl ;¨­ ç¥ 3-¥ ®ª­®
ld a,(de)
ld (hl),a ;¯®¤ª«îç¨âì ¡ ­ªã ¯à®£à ¬¬ë
ret
;[]=========================================================================[]
;[] ‚ëç¨á«¥­¨¥ ­¥®¡å®¤¨¬®£® ª®«-¢  ¡ ­®ª ¤«ï § £à㧪¨ ä ©«  ¢ ¯ ¬ïâì []
;[] ‚室: HL:IX - ¤«¨­  ä ©«  ¢ ¡ ©â å []
;[] DE - ª®«-¢® ¡ ©â ¤«ï § £à㧪¨ ¢ 1-î ¡ ­ªã []
;[] ‚ë室: A - ª®«-¢® ­¥®¡å®¤¨¬ëå ¡ ­®ª []
;[] ä« £ C - ®è¨¡ª , ª®¤ ®è¨¡ª¨ ¢ A []
;[]=========================================================================[]
NBank:
push ix
ld b,h
ld c,l
pop hl
inc bc
xor a
inc a
sbc hl,de
jr nc,$+4
jr .L5
ld de,16384 ;à §¬¥à ¡ ­ª¨
push af
.L2 pop af
.L1 inc a
jr z,.L3
sbc hl,de
jr nc,.L1
.L5 dec bc
push af
ld a,b
or c
jr nz,.L2
pop af
or a ;á¡à®á¨âì ä« £ C
ret
.L3 ld a,0x1E ;"<22>¥¤®áâ â®ç­® ¯ ¬ïâ¨"
; JP ErrorDSS
ret
BankP ds 4 ;­®¬¥à  ¡ ­®ª § £à㦠¥¬®© ¯à®£¨
MemId ds 3 ;id-¡«®ª  ¯ ¬ï⨠¯®¤ ä ©«,
;ª®«-¢® ¢ë¤¥«¥­­ëå ¡ ­®ª,
;áç¥â稪 § £à㦥­­ëå ¡ ­®ª
FId db 0 ;ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
FDebug ds 128
db 0
FStart dw 0x4200
FRam dw 0 ; ¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ïâ¨