FFORMAT/MAIN.ASM
Anatoliy Belyanskiy 3ef8aefe30 Begin
2024-06-09 08:13:19 +10:00

246 lines
3.4 KiB
NASM
Executable File
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.

; Š®¤ ”®à¬ â¨«ª¨ (¡¥§ ¥å¥-§ £®«®¢ª ) 㯠ª®¢ ­ Hrust v1.2
;
; ®¯¨á ­¨¥ ds xx
; %imacro ds 1
; times %1 db 0
; %endmacro
include './shared_includes/constants/dss_equ.inc'
include './shared_includes/constants/bios_equ.inc'
org #9200 - exe_begin.size
exe_begin: db 'EX' ; exe ID
db 'E' ; exe ⨯
db 1 ; exe ¢¥àá¨ï
DWORD exe_begin.size ; ᬥé. ª®¤ 
dw 0 ; end-beg, ¯¥à¢¨ç­ë© § £àã§ç¨ª
dw 0,0 ; १¥à¢
dw 0 ;
dw Packed ;  ¤à¥á § £à㧪¨ ª®¤ 
dw Start ;  ¤à¥á ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï
dw #C000 ;  ¤à¥á á⥪ 
;ds 490 ; १¥à¢
.size EQU $-exe_begin
org #9200
Packed: incbin 'build/format.hrs'
Start: ld c,0 ; ã§­ âì ¢¥àá¨î „Ž‘
RST ToDSS
ld hl,0145h ; 1.69
and a
sbc hl,de
jr c,ok ; > 1.69
;
ld hl,ver_err
ld c,5Ch
RST ToDSS
ld bc,#2641
RST ToDSS
ret
ver_err: db "Invalid DSS version, DSS 1.70 or higher is required.",0Dh,0Ah,0
ok: LD HL,#6200 ;!HARDCODE
LD BC,Dss.AppInfo.EXE_HomeDir
RST ToDSS
;
ld hl,Packed ; 㯠ª. ¤ ­­ë¥
ld de,6400h ; ªã¤  à á¯ ª®¢ âì
push de ;  ¤à¥á ¯¥à¥å®¤ 
; ä®à¬ â 㯠ª. ä ©« :
; +0 (word) "HR" - ᨣ­ âãà 
; +2 (word) - ¤«¨­  ¨á室­®£® ä ©« 
; +4 (word) - ¤«¨­  㯠ª®¢ ­­®£® ä ©« 
; <20> á¯ ª®¢é¨ª (DeHrust)
ld ix,-12
add ix,sp
push de
ld sp,hl
pop bc
ex de,hl
pop bc
dec bc
add hl,bc
ex de,hl
pop bc
dec bc
add hl,bc
sbc hl,de
add hl,de
jr c,loc1
ld d,h
ld e,l
loc1: lddr
ex de,hl
ld d,(ix+11)
ld e,(ix+10)
ld sp,hl
pop hl
pop hl
pop hl
ld b,6
loc2: dec sp
pop af
ld (ix+6),a
inc ix
djnz loc2
exx
ld d,0BFh
ld bc,1010h
pop hl
loc3: dec sp
pop af
exx
loc4: ld (de),a
inc de
loc5: exx
loc6: add hl,hl
djnz loc7
pop hl
ld b,c
loc7: jr c,loc3
ld e,1
loc8: ld a,80h
loc9: add hl,hl
djnz loc10
pop hl
ld b,c
loc10: rla
jr c,loc9
cp 3
jr c,loc11
add a,e
ld e,a
xor c
jr nz,loc8
loc11: add a,e
cp 4
jr z,loc26
adc a,0FFh
cp 2
exx
loc12: ld c,a
loc13: exx
ld a,0BFh
jr c,loc17
loc14: add hl,hl
djnz loc15
pop hl
ld b,c
loc15: rla
jr c,loc14
jr z,loc16
inc a
add a,d
jr nc,loc18
sub d
loc16: inc a
jr nz,loc20
ld a,0EFh
loc17: rrca
cp a
loc18: add hl,hl
djnz loc19
pop hl
ld b,c
loc19: rla
jr c,loc18
loc20: exx
ld h,0FFh
jr z,loc21
ld h,a
dec sp
inc a
jr z,loc24
pop af
loc21: ld l,a
add hl,de
ldir
loc22: jr loc5
;
loc23: exx
rrc d
jr loc6
;
loc24: pop af
cp 0E0h
jr c,loc21
rlca
xor c
inc a
jr z,loc23
sub 10h
loc25: ld l,a
ld c,a
ld h,0FFh
add hl,de
ldi
dec sp
pop af
ld (de),a
inc hl
inc de
ld a,(hl)
jr loc4
;
loc26: ld a,80h
loc27: add hl,hl
djnz loc28
pop hl
ld b,c
loc28: adc a,a
jr nz,loc31
jr c,loc27
ld a,0FCh
jr loc32
;
loc29: dec sp
pop bc
ld c,b
ld b,a
ccf
jr loc13
;
loc30: cp 0Fh
jr c,loc29
jr nz,loc12
add a,0F4h
ld sp,ix
jr loc34
;
loc31: sbc a,a
ld a,0EFh
loc32: add hl,hl
djnz loc33
pop hl
ld b,c
loc33: rla
jr c,loc32
exx
jr nz,loc25
bit 7,a
jr z,loc30
sub 0EAh
loc34: ex de,hl
loc35: pop de
ld (hl),e
inc hl
ld (hl),d
inc hl
dec a
jr nz,loc35
ex de,hl
jr nc,loc22
ret