mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-18 18:12:40 +03:00
389 lines
14 KiB
NASM
389 lines
14 KiB
NASM
;[]=========================================================================[]
|
||
;[] Œ®¨â®à-®â« ¤ç¨ª DemoN []
|
||
;[] v0.01 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 10.10.2004 []
|
||
;[] v0.02 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 07.02.2005 []
|
||
;[] v0.03 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 11.03.2006 []
|
||
;[] v0.10 - ¯®á«¥¤¨¥ ¨§¬¥¥¨ï 27.08.2006 []
|
||
;[]=========================================================================[]
|
||
|
||
DEVICE ZXSPECTRUM128
|
||
|
||
; define DEBUG 1 ;®âªàë⨥ ¤¥¡ ££¥àëå § £«ã襪
|
||
; define D_PRINTCH_BIOS 1
|
||
|
||
org #8100-512
|
||
STARTPRG
|
||
DB "EXE" ;EXE ID
|
||
DB #00 ;EXE VERSION
|
||
DW #0200 ;CODE OFFSET LOW
|
||
DW #0000 ;CODE OFFSET HIGH
|
||
DW #0000 ;END-BEG ;PRIMARY LOADER
|
||
DW #0000 ;
|
||
DW #0000 ;RESERVED
|
||
DW #0000 ;
|
||
DW OrgAdr ;LOAD ADDRESS
|
||
DW OrgAdr ;START ADDRESS
|
||
DW #C001 ;STACK ADDRESS
|
||
|
||
|
||
OrgAdr equ 0x8100
|
||
org OrgAdr
|
||
; stack 0xC001
|
||
|
||
push ix ; ¤à¥á ª®¬ ¤®© áâப¨
|
||
in a,(EmmWin.P2) ;¡ ª á ®â« ¤ç¨ª®¬
|
||
ld (BankDebug),a
|
||
in a,(EmmWin.P0) ;¡ ª á OS
|
||
ld (BankOS),a
|
||
; ld (WinPage),a
|
||
|
||
; ld (Reg._SP),sp ; ¤à¥á á⥪
|
||
call SaveAllRegs ;á®åà ¥¨¥ ॣ¨áâ஢ëå ¯ à
|
||
; ld a,(BankDebug)
|
||
ld a,0xFF ;áªàë¢ ¥¬ ¡ ªã á ®â« ¤ç¨ª®¬
|
||
ld (WinPage+2),a
|
||
include "cmdline.asm"
|
||
call nc,LoadFile
|
||
jp Start
|
||
|
||
HorizLine db 8 ;ª®«¨ç¥á⢮ «¨¨©
|
||
;1-¤«¨ 2-á⮫¡¥æ 3-áâப 4-ᨬ¢®«
|
||
db 0x4E,0x01,0x00,0xCD, 0x17,0x01,0x03,0xC4
|
||
db 0x17,0x01,0x09,0xC4, 0x17,0x01,0x0F,0xC4
|
||
db 0x17,0x01,0x11,0xCD, 0x4E,0x01,0x15,0xCD
|
||
db 0x4E,0x01,0x1E,0xCD, 0x17,0x01,0x13,0xCD
|
||
|
||
VerticalLine db 5 ;ª®«¨ç¥á⢮ «¨¨©
|
||
;1-¢ëá®â 2-á⮫¡¥æ 3-áâப 4-ᨬ¢®«
|
||
db 0x1D,0x00,0x01,0xBA, 0x10,0x09,0x01,0xB3
|
||
db 0x08,0x0C,0x16,0xBA, 0x14,0x18,0x01,0xBA
|
||
db 0x1D,0x4F,0x01,0xBA
|
||
|
||
Corner db 41 ;㣫ë à ¬®ª
|
||
;1-á⮫¡¥æ 2-áâப 3-ᨬ¢®«
|
||
db 0x00,0x00,0xC9, 0x00,0x03,0xC7, 0x00,0x09,0xC7
|
||
db 0x00,0x0F,0xC7, 0x00,0x11,0xCC, 0x00,0x15,0xCC
|
||
db 0x00,0x1E,0xC8, 0x06,0x11,0xD1, 0x06,0x13,0xCF
|
||
db 0x09,0x00,0xD1, 0x09,0x03,0xC5, 0x09,0x09,0xC5
|
||
db 0x09,0x0F,0xC5, 0x0C,0x11,0xD1, 0x0C,0x15,0xCB
|
||
db 0x0C,0x1E,0xCA, 0x12,0x0F,0xC2, 0x12,0x11,0xD8
|
||
db 0x12,0x13,0xCF, 0x18,0x00,0xCB, 0x18,0x03,0xB6
|
||
db 0x18,0x09,0xB6, 0x18,0x0F,0xB6, 0x18,0x15,0xCA
|
||
db 0x00,0x13,0xCC, 0x0C,0x13,0xCF, 0x4F,0x00,0xBB
|
||
db 0x18,0x13,0xB9, 0x4F,0x15,0xB9, 0x4F,0x1E,0xBC
|
||
db 0x18,0x11,0xB9, 0x06,0x12,0xB3, 0x12,0x10,0xB3
|
||
db 0x12,0x12,0xB3, 0x09,0x13,0xD1, 0x09,0x14,0xB3
|
||
db 0x09,0x15,0xCF, 0x0C,0x12,0xB3, 0x0E,0x13,0xCB
|
||
db 0x0E,0x14,0xBA, 0x0E,0x15,0xCA
|
||
|
||
TextStrReg db 0x16,0x01,0x01,"IX", 0x16,0x01,0x02,"IY"
|
||
db 0x16,0x01,0x04,"HL", 0x16,0x01,0x05,"DE"
|
||
db 0x16,0x01,0x06,"BC", 0x16,0x01,0x07,"AF"
|
||
db 0x16,0x01,0x0A,"HL'", 0x16,0x01,0x0B,"DE'"
|
||
db 0x16,0x01,0x0C,"BC'", 0x16,0x01,0x0D,"AF'"
|
||
db 0x16,0x01,0x10,"PC", 0x16, 0x0A,0x10,"IR"
|
||
db 0x16,0x01,0x14,"SP",0
|
||
TextStrLogo db 0x016,0x01,0x1F,0xC4,0xCD,0xCD
|
||
db " DemoN v"
|
||
incbin "VERSION\major.bin"
|
||
db "."
|
||
incbin "VERSION\minor.bin"
|
||
db " build "
|
||
incbin "VERSION\build.bin"
|
||
db " (alpha)-"
|
||
incbin "VERSION\date.bin"
|
||
db " Igor by AlphA Studio, Hard/WCG"
|
||
db 0x20,0xCD,0xCD,0xC4,0x00
|
||
TextStrWin db 0x16,0x02,0x11," 0 ",0x16,0x08,0x11," 1 "
|
||
db 0x16,0x0E,0x11," 2 ",0x16,0x14,0x11," 3 ",0
|
||
TextStrRez db 0x16,0x0F,0x14,"REZ",0
|
||
|
||
|
||
;<3B>à®æ¥¤ãà ¯à®à¨á®¢ª¨ «¨¨©
|
||
;HL - ¤à¥á ç « â ¡«¨æë
|
||
DrawLine ld c,(hl) ;ª®«¨ç¥á⢮ «¨¨©
|
||
inc hl
|
||
ld b,(hl) ;¤«¨ «¨¨¨
|
||
inc hl
|
||
ld e,(hl) ;á⮫¡¥æ
|
||
inc hl
|
||
ld d,(hl) ;áâப
|
||
inc hl
|
||
ld a,(hl) ;ᨬ¢®«
|
||
push hl
|
||
.L1 push bc
|
||
push af
|
||
ld bc,Dss.WrChar ;梥⠢ ॣ.B
|
||
rst DssRst
|
||
inc d ; à 騢 ¨¥ ª®®à¤¨ âë
|
||
pop af
|
||
pop bc
|
||
djnz .L1
|
||
pop hl
|
||
dec c
|
||
jr nz,DrawLine+1
|
||
ret
|
||
|
||
;<3B> ç «® ¯à®£à ¬¬ë
|
||
Start:
|
||
ld hl,Hello ;á®®¡é¥¨¥ ¯à®£à ¬¬ë
|
||
ld c,Dss.PChars ;¢ë¢¥á⨠áâபã
|
||
rst DssRst
|
||
ld c,Dss.GetVMod ;’¥ªã騩 £à ä ०¨¬
|
||
rst DssRst
|
||
jp c,Exit
|
||
ld (OSGrafMode),a
|
||
ld a,b
|
||
ld (OSScreen),a ;¨ ⥪ãé ï áâà ¨æ íªà
|
||
push bc
|
||
ld bc,#0100+Dss.GetMem ;१¥à¢¨à㥬 1 áâà ¨æã ¤«ï ®ª®®£® ¡ãä¥à
|
||
rst DssRst
|
||
pop de ;‚ D - ®¬¥à áâà ¨æë íªà - OSScreen
|
||
jp c,Exit ;Žè¨¡ª ¢ë¤¥«¥¨ï ¡«®ª ¯ ¬ïâ¨
|
||
ld (BufPage),a ;‘®åà ¨¬ áâà ¨æã ¢ ¯¥à¥¬¥®©
|
||
ld b,a
|
||
ld a,(DemonScreen)
|
||
cp d ;¥á«¨ íªà ë Ž‘ ¨ „¥¬® ¥ ᮢ¯ ¤ îâ
|
||
jr nz,StartNext ;â® ¨ ¥ á®åà 塞 íªà Ž‘¨
|
||
ld de,0 ;‘®åà 塞 íªà ¢ ¤®¯.áâà ¨æ¥
|
||
ld hl,#2050
|
||
ld ix,#c000
|
||
ld c,Dss.WinCopy
|
||
rst DssRst
|
||
|
||
StartNext ld a,(DemonScreen) ;íªà ®â« ¤ç¨ª
|
||
ld b,a
|
||
ld a,3 ;ãáâ ®¢¨âì ०¨¬ 80å32
|
||
ld c,Dss.SetVMod ;Dss.SelPage
|
||
; ld bc,0x0054
|
||
rst DssRst
|
||
ifdef D_PRINTCH_BIOS
|
||
ld ix,MainWin ;Žâªàë⨥ ®ª ç/§ ¡¨®á
|
||
ld e,00010001b
|
||
rst BiosRst
|
||
ld (Demon.Bios_Win),a
|
||
; jr nc,.lp1
|
||
; ld c,Dss.EchoKey ;¤¥¡ã££¥à ï § £«ãèª
|
||
; rst DssRst
|
||
|
||
endif
|
||
.lp1
|
||
; ld a,(Color._SP) ;¯®¤á¢¥âª ¢¥àè¨ë á⥪
|
||
; ld b,a
|
||
; ld de,0x1C01
|
||
; ld hl,0x010B
|
||
; ld a," "
|
||
; ld c,Dss.Clear
|
||
; rst DssRst
|
||
call ClearScreen
|
||
call DrawDemonScreen
|
||
|
||
; ld c,Dss.EchoKey ;¤¥¡ã££¥à ï § £«ãèª
|
||
; rst DssRst
|
||
|
||
jp Start1
|
||
;Ž¡®¢«¥¨¥ íªà ¤¥¬®
|
||
RefreshScreen call CursorRes
|
||
call ClearScreen
|
||
call DrawDemonScreen
|
||
call Refresh
|
||
call Cursor ;¢ª« ªãàá®à
|
||
jp CursorSet
|
||
|
||
ClearScreen ld a,(Color.Screen)
|
||
ld b,a ;®ç¨á⪠íªà
|
||
ld de,0
|
||
ld hl,0x2050
|
||
ld c,Bios.Lp_Cls_Win
|
||
rst BiosRst
|
||
ret
|
||
DrawDemonScreen
|
||
ld a,(Color.Border) ;ãáâ ®¢ª 梥â à ¬ª¨
|
||
ld (DrawLine.L1+4),a
|
||
ld (DrawCorner+10),a
|
||
ld a,0x14 ;ª®¤ ¬¥¬®¨ª¨ INC D
|
||
ld (DrawLine.L1+6),a
|
||
|
||
ld hl,VerticalLine ;¢¥à⨪ «ìë¥ «¨¨¨
|
||
call DrawLine
|
||
|
||
ld hl,HorizLine ;£®à¨§®â «ìë¥ «¨¨¨
|
||
ld a,0x1C ;ª®¤ ¬¥¬®¨ª¨ INC E
|
||
ld (DrawLine.L1+6),a
|
||
call DrawLine
|
||
|
||
ld hl,Corner
|
||
ld b,(hl) ;ª®«¨ç¥á⢮ 㣫®¢
|
||
DrawCorner push bc
|
||
inc hl
|
||
ld e,(hl) ;á⮫¡¥æ
|
||
inc hl
|
||
ld d,(hl) ;áâப
|
||
inc hl
|
||
ld a,(hl) ;ᨬ¢®«
|
||
push hl
|
||
ld bc,Dss.WrChar ;梥⠢ ॣ.B
|
||
rst DssRst
|
||
pop hl
|
||
pop bc
|
||
djnz DrawCorner
|
||
|
||
ld hl,TextStrReg
|
||
ld a,(Color.TextStrReg) ;梥â ॣ¨áâ஢ëå ¯ à
|
||
ld (PrnStrColor.L1+5),a
|
||
call PrnStrColor
|
||
ld hl,TextStrWin
|
||
ld a,(Color.TextStrWin) ;梥⠮¬¥à®¢ ®ª®
|
||
ld (PrnStrColor.L1+5),a
|
||
call PrnStrColor
|
||
ld hl,TextStrLogo
|
||
ld a,(Color.TextStrLogo) ;梥⠫®£® ¯à®£à ¬¬ë
|
||
ld (PrnStrColor.L1+5),a
|
||
call PrnStrColor
|
||
ld hl,TextStrRez
|
||
ld a,(Color.RezArea) ;梥â १¨¤¥â
|
||
ld (PrnStrColor.L1+5),a
|
||
call PrnStrColor
|
||
ret
|
||
ds OrgAdr+0x700-$
|
||
Start1:
|
||
call PreparChar ;¯®¤£®â®¢ª ¯à®£à ¬¬®£® ªãàá®à ¢¢®¤
|
||
; ld hl,(Reg._PC)
|
||
; ld hl,0
|
||
; ld (ListAdr),hl
|
||
|
||
call Refresh
|
||
call Keyb
|
||
|
||
Exit:
|
||
ld hl,(Rst38.Vect+1) ;¢®ááâ ®¢«¥¨¥ ¢¥ªâ®à DSS
|
||
ld (0039h),hl
|
||
|
||
ld a,(OSScreen) ;¨ ⥪ãé ï áâà ¨æ íªà
|
||
ld b,a
|
||
push bc
|
||
ld a,(OSGrafMode)
|
||
ld c,Dss.SetVMod
|
||
|
||
; ld bc,0x0100+Dss.SelPage ;¢®ááâ ®¢«¥¨¥ íªà DSS
|
||
rst DssRst
|
||
pop bc
|
||
ld a,(DemonScreen)
|
||
cp b
|
||
jr nz,ExitNext
|
||
ld de,0 ;‚®ááâ ¢«¨¢ ¥¬ íªà ¨§ ¤®¯.áâà ¨æë
|
||
ld hl,#2050
|
||
ld ix,#c000
|
||
ld c,Dss.WinRest
|
||
ld a,(BufPage)
|
||
push af
|
||
ld b,a
|
||
rst DssRst
|
||
pop af
|
||
ld c,Dss.FreeMem ;Žâ¤ ¥¬ áâà ¨æã ¡ãä¥à ®¡à â® Ž‘¨
|
||
rst DssRst
|
||
|
||
ExitNext
|
||
ld bc,Dss.Exit ;®à¬ «ì®¥ § ¢¥à襨¥
|
||
rst DssRst
|
||
Return ret
|
||
|
||
Refresh:
|
||
di
|
||
ld de,0x0104 ;¢ë¢®¤ § 票© ॣ¨áâ஢
|
||
ld hl,(Reg._IX)
|
||
call PrintStrReg
|
||
ld de,0x0204
|
||
ld hl,(Reg._IY)
|
||
call PrintStrReg
|
||
ld de,0x0404
|
||
ld hl,(Reg._HL)
|
||
call PrintStrReg
|
||
ld de,0x0504
|
||
ld hl,(Reg._DE)
|
||
call PrintStrReg
|
||
ld de,0x0604
|
||
ld hl,(Reg._BC)
|
||
call PrintStrReg
|
||
ld de,0x0A04
|
||
ld hl,(Reg._HL_)
|
||
call PrintStrReg
|
||
ld de,0x0B04
|
||
ld hl,(Reg._DE_)
|
||
call PrintStrReg
|
||
ld de,0x0C04
|
||
ld hl,(Reg._BC_)
|
||
call PrintStrReg
|
||
ld de,0x0704
|
||
ld hl,(Reg._AF)
|
||
call PrintStrAF
|
||
ld de,0x0D04
|
||
ld hl,(Reg._AF_)
|
||
call PrintStrAF
|
||
ld de,0x1004
|
||
ld hl,(Reg._PC)
|
||
call PrintReg
|
||
ld de,0x100D
|
||
ld hl,(Reg._IR)
|
||
call PrintReg
|
||
ld de,0x1404
|
||
ld hl,(Reg._SP)
|
||
call PrintReg
|
||
call PrintSPDn
|
||
ld de,0x1413
|
||
ld hl,(RezAdr)
|
||
call PrintReg
|
||
|
||
call PrintStrWin ;¢ë¢®¤ ®¬¥à®¢ ¡ ®ª ¢ ®ª å
|
||
|
||
call PrintStrSP ;¢ë¢®¤ ¤ ¬¯ á⥪
|
||
|
||
call PrintDump
|
||
ei
|
||
jp DisAsm
|
||
|
||
DemonHelp call CursorRes
|
||
ld ix,HelpWnd
|
||
jp DialogWindow
|
||
|
||
; ld hl,HelpWndDlg
|
||
; jp WinDialog
|
||
HelpWnd db 6,16,11,42,7,#27
|
||
db "DemoN Help Page",0
|
||
db " DemoN v"
|
||
incbin "VERSION\major.bin"
|
||
db "."
|
||
incbin "VERSION\minor.bin"
|
||
db " build "
|
||
incbin "VERSION\build.bin"
|
||
db " (alpha)-"
|
||
incbin "VERSION\date.bin"
|
||
db 0x0D
|
||
db " Igor by AlphA Studio, Hard/WCG",0x0D,0x0D
|
||
db " OK",0
|
||
HelpWndDlg db 1 ;ޝ¨á â¥«ì ¤¨ «®£®¢®£® ®ª
|
||
db 16+19,16,4,2
|
||
dw 0,0
|
||
|
||
include "EQU\dss_equ.asm";"D:\WORKAST\EQU\dss_equ"
|
||
include "EQU\bios_equ.asm";"D:\WORKAST\EQU\bios_equ"
|
||
include "EQU\port.asm";"D:\WORKAST\EQU\port"
|
||
include "disasm.asm";"D:\WORKAST\DEMON\disasm"
|
||
include "util.asm";"D:\WORKAST\DEMON\util"
|
||
include "file.asm";"D:\WORKAST\DEMON\file"
|
||
include "error.asm";"D:\WORKAST\DEMON\error"
|
||
include "clock.asm";"D:\WORKAST\DEMON\clock"
|
||
include "keyb.asm";"D:\WORKAST\DEMON\keyb"
|
||
include "kreg.asm";"D:\WORKAST\DEMON\kreg"
|
||
include "kstack.asm";"D:\WORKAST\DEMON\kstack"
|
||
include "kdump.asm";"D:\WORKAST\DEMON\kdump"
|
||
include "rez.asm";"D:\WORKAST\DEMON\rez"
|
||
include "step.asm";"D:\WORKAST\DEMON\step"
|
||
include "savescr.asm";"D:\WORKAST\DEMON\savescr"
|
||
include "data.asm";"D:\WORKAST\DEMON\data"
|
||
include "tabl.asm";"D:\WORKAST\DEMON\tabl"
|
||
include "loadbin.asm"
|
||
include "windows.asm"
|
||
|
||
EndOfDaemon
|
||
savebin "demon.exe",STARTPRG,EndOfDaemon-STARTPRG |