mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-18 01:52:43 +03:00
275 lines
12 KiB
NASM
275 lines
12 KiB
NASM
;[]=========================================================================[]
|
||
;[] ” ©«®¢ë¥ ¯à®æ¥¤ãàë ¬®¨â®à -®â« ¤ç¨ª 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 ; ¤à¥á à ᯮ«®¦¥¨ï ª®¤ ¢ ¯ ¬ïâ¨
|
||
|