mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
bugs
This commit is contained in:
parent
2f0db9fa98
commit
0af59044c8
@ -93,6 +93,8 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
|
||||
LD HL,(FCLUSTR)
|
||||
LD DE,#C000
|
||||
CALL FLOAD ; § £à㧪
|
||||
|
||||
|
||||
DI
|
||||
XOR A
|
||||
OUT (SYS_PORT.OFF),A
|
||||
@ -434,6 +436,84 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
||||
INC A
|
||||
RET
|
||||
|
||||
; ; HL - CLUSTER
|
||||
; ; DE - ADDRESS
|
||||
; ;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥¨¥ à §¬¥à SYSTEM.DOS ¨ ¢®§¬®¦®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ¨æë
|
||||
; FLOAD: LD (READMEM),DE
|
||||
; .LD_FILE: PUSH HL ; system.dos first cluster
|
||||
; CALL NSECTOR ; Cluster to Sector
|
||||
; LD DE,(READMEM)
|
||||
; LD A,(BOOT.SectorsPerCluster)
|
||||
; CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
||||
; LD C,BIOS.DRV_READ_LONG
|
||||
; JR C,.SMALL_CLUSTER
|
||||
; LD A,(BANKDOS)
|
||||
; EX AF,AF'
|
||||
; ;LD BC,#20*256 + BIOS.DRV_READ_LONG
|
||||
; LD B,#20 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
||||
; .set_drv: LD A,(DRIVE)
|
||||
; RST ToBIOS_18
|
||||
; JP C,GOOD_DRIVE.NoShell
|
||||
; POP HL
|
||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||
; ;AND A
|
||||
; ;RET
|
||||
; LD A,(BIG_SHELL)
|
||||
; OR A
|
||||
; RET Z
|
||||
; ;
|
||||
; XOR A
|
||||
; LD (BIG_SHELL),A
|
||||
; PUSH HL
|
||||
; CALL NSECTOR
|
||||
; LD DE,#20 ; !HARDCODE ª®«-¢® ¯à®ç¨â ëå ᥪâ®à®¢
|
||||
; AND A
|
||||
; ADD IX,DE
|
||||
; JR NC,.no_inc_hl
|
||||
; INC HL
|
||||
; .no_inc_hl: LD BC,SUBLOAD_SIZE*256 + BIOS.DRV_READ ; !HARDCODE ª®«-¢® „ާ £à㦠¥¬ëå ᥪâ®à®¢
|
||||
; LD DE,#4000
|
||||
; JR .set_drv
|
||||
; ;
|
||||
; .SMALL_CLUSTER: LD B,A
|
||||
; ;LD C,BIOS.DRV_READ_LONG
|
||||
; LD A,(BANKDOS)
|
||||
; EX AF,AF'
|
||||
; LD A,(DRIVE)
|
||||
; RST ToBIOS_18
|
||||
; JP C,GOOD_DRIVE.NoShell
|
||||
; ;
|
||||
; LD HL,(READMEM)
|
||||
; LD DE,(CLU_LEN)
|
||||
; ADD HL,DE
|
||||
; LD (READMEM),HL
|
||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||
; ;POP HL
|
||||
; ;RET C
|
||||
; CALL C,.more_than_1
|
||||
; POP HL
|
||||
; RET C
|
||||
; ;
|
||||
; CALL R_F_FAT ; next cluster in chain
|
||||
; RET C
|
||||
; EX DE,HL
|
||||
; JP .LD_FILE
|
||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
||||
; .more_than_1: LD A,(BIG_SHELL)
|
||||
; OR A
|
||||
; SCF
|
||||
; RET Z
|
||||
; IN A,(SLOT1)
|
||||
; LD HL,BANKDOS
|
||||
; CP (HL)
|
||||
; CCF
|
||||
; RET Z
|
||||
; LD (BANKDOS),A
|
||||
; LD HL,#C000
|
||||
; LD (READMEM),HL
|
||||
; AND A
|
||||
; RET
|
||||
|
||||
; HL - CLUSTER
|
||||
; DE - ADDRESS
|
||||
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥¨¥ à §¬¥à SYSTEM.DOS ¨ ¢®§¬®¦®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ¨æë
|
||||
@ -442,7 +522,7 @@ FLOAD: LD (READMEM),DE
|
||||
CALL NSECTOR ; Cluster to Sector
|
||||
LD DE,(READMEM)
|
||||
LD A,(BOOT.SectorsPerCluster)
|
||||
CP #20
|
||||
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
||||
LD C,BIOS.DRV_READ_LONG
|
||||
JR C,.SMALL_CLUSTER
|
||||
LD A,(BANKDOS)
|
||||
@ -474,7 +554,6 @@ FLOAD: LD (READMEM),DE
|
||||
JR .set_drv
|
||||
;
|
||||
.SMALL_CLUSTER: LD B,A
|
||||
;LD C,BIOS.DRV_READ_LONG
|
||||
LD A,(BANKDOS)
|
||||
EX AF,AF'
|
||||
LD A,(DRIVE)
|
||||
@ -509,6 +588,12 @@ FLOAD: LD (READMEM),DE
|
||||
LD (BANKDOS),A
|
||||
LD HL,#C000
|
||||
LD (READMEM),HL
|
||||
LD A,(BOOT.SectorsPerCluster)
|
||||
SUB SUBLOAD_SIZE + 1
|
||||
CCF
|
||||
RET NC
|
||||
LD A,SUBLOAD_SIZE
|
||||
LD (BOOT.SectorsPerCluster),A
|
||||
AND A
|
||||
RET
|
||||
|
||||
|
||||
@ -161,9 +161,15 @@ DISKINF: LD C,B
|
||||
EXX
|
||||
LD B,A
|
||||
LD C,A
|
||||
.loop_free_space:
|
||||
.loop_free_space:;!FIXIT
|
||||
PUSH BC
|
||||
EXX
|
||||
PUSH BC
|
||||
EXX
|
||||
CALL READ_FROM_FAT
|
||||
EXX
|
||||
POP BC
|
||||
EXX
|
||||
POP BC
|
||||
CP DSS_Error.sys.DISK_FULL
|
||||
RET Z
|
||||
|
||||
@ -399,6 +399,10 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
;
|
||||
.checkDir: LD HL,CurrentDirectory+1
|
||||
LD DE,WorkDirectory+1
|
||||
; áçñâ稪
|
||||
LD A,B
|
||||
LD B,C
|
||||
EX AF,AF'
|
||||
;
|
||||
.loop: LD A,(DE)
|
||||
AND A
|
||||
@ -406,8 +410,22 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
CP (HL)
|
||||
INC HL
|
||||
INC DE
|
||||
JR Z,.loop
|
||||
JP .gotoPath
|
||||
JR NZ,.gotoPath
|
||||
DJNZ .loop
|
||||
EX AF,AF'
|
||||
SUB 1
|
||||
RET C
|
||||
EX AF,AF'
|
||||
DJNZ .loop
|
||||
;
|
||||
.gotoPath: LD C,B
|
||||
EX AF,AF'
|
||||
LD B,A
|
||||
CALL FINDDIR.CHECK_SLASH
|
||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||
RET C
|
||||
LD HL,CurrentPath
|
||||
JP GETWORD
|
||||
;
|
||||
.end: CP (HL)
|
||||
RET Z
|
||||
@ -417,12 +435,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
ADD 'A'
|
||||
CP (HL)
|
||||
RET
|
||||
.gotoPath: CALL FINDDIR.CHECK_SLASH
|
||||
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||
RET C
|
||||
LD HL,CurrentPath
|
||||
JP GETWORD
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
;
|
||||
STRUCT _sStack ; 256 bytes
|
||||
STRUCT _sStack ; 256 bytes
|
||||
.buffer BLOCK 256,0
|
||||
.SPoint BYTE 0
|
||||
ENDS
|
||||
;
|
||||
|
||||
;
|
||||
STRUCT _sEXE_HEADER ; 512 bytes
|
||||
.EXE_EXT TEXT 3,{"EX","E"}
|
||||
.VERSION BYTE 0
|
||||
.OFFCOD1 WORD 0
|
||||
.OFFCOD2 WORD 0
|
||||
.LOADER WORD 0
|
||||
.RESERVED BLOCK 6,0
|
||||
.LD_ADDR WORD 0
|
||||
.PC_REG WORD 0
|
||||
.SP_REG WORD 0
|
||||
.RESERVED2 BLOCK 490,0
|
||||
STRUCT _sEXE_HEADER ; 512 bytes
|
||||
.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE ‘¨£ âãà
|
||||
.VERSION BYTE 0 ; 3 Version of EXE file
|
||||
.OFFCOD1 WORD 00 ; 4-5 ‘ ª ª®£® á¬¥é¥¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
|
||||
.OFFCOD2 WORD 00 ; 6-7 ¯ ¬ïâì ¯® ¤à¥áã (Code_addr) Low addr, High addr.
|
||||
.LOADER WORD 00 ; 8-9 <EFBFBD> §¬¥à ¯¥à¢¨ç®£® § £àã§ç¨ª ¨«¨ 0
|
||||
.RESERVED BLOCK 6,0 ; 10-15 Reserved
|
||||
.LD_ADDR WORD 00 ; 16-17 €¤à¥á à ᯮ«®¦¥¨ï ª®¤ ¢ ¯ ¬ï⨠(#4100-#FFFF)
|
||||
.PC_REG WORD 00 ; 18-19 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
|
||||
.SP_REG WORD 00 ; 20-21 €¤à¥á á⥪ (Reg. SP)
|
||||
.RESERVED2 BLOCK 490,0 ; 22-512 Œ®¦® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥¤àñ¦ ¨«¨ ¥ ¨á¯®«ì§®¢ âì
|
||||
ENDS
|
||||
;
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
957
|
||||
959
|
||||
@ -155,5 +155,5 @@ MOUSE_BAUD:
|
||||
;
|
||||
;----------------------------------------------------;
|
||||
; <EFBFBD>ЈЌ ЈЅ, стЅЊ хр Јтся Ђ тЎЉ ІЅ стр ЈцЅ!
|
||||
SUBLOAD_SIZE EQU 10 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ¨æã
|
||||
SUBLOAD_SIZE EQU 2 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ¨æã
|
||||
;----------------------------------------------------;
|
||||
|
||||
@ -11,7 +11,7 @@ cmd_chdir:
|
||||
xor a
|
||||
ld hl,work_buffer1;
|
||||
cp (hl)
|
||||
jr nz,A877B
|
||||
jr nz,.chdir
|
||||
ld (hl),"." ; ".." த¨â. ¯ ¯ª
|
||||
inc hl
|
||||
ld (hl),"."
|
||||
@ -19,7 +19,7 @@ cmd_chdir:
|
||||
ld (hl),0
|
||||
dec hl
|
||||
dec hl
|
||||
A877B: ld c,Dss.ChDir ; ᬥ¨âì ⥪. ª â «®£
|
||||
.chdir: ld c,Dss.ChDir ; ᬥ¨âì ⥪. ª â «®£
|
||||
RST ToDSS
|
||||
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥¨ï
|
||||
jp Get_Path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
|
||||
|
||||
@ -181,9 +181,10 @@ cmd_dir:
|
||||
;ld hl,has_not_full_info
|
||||
;JR Z,.skip_full_space
|
||||
;
|
||||
ld hl,(free_space) ; ¬«. à §àï¤
|
||||
ld hl,(free_space_low) ; ¬«. à §àï¤
|
||||
exx
|
||||
ld hl,(free_space+2) ; áâ. à §àï¤
|
||||
ld hl,(free_space_medium) ; áâ. à §àï¤
|
||||
;!FIXIT ¨á¯®«ì§®¢ âì áâ à訩 à §àï¤! free_space_high
|
||||
exx
|
||||
CALL Size2Char
|
||||
ld hl,T8B46 ; "0 000 000 000"
|
||||
@ -495,11 +496,13 @@ A8B16: inc a
|
||||
ret
|
||||
;
|
||||
|
||||
D88DC: dw 0
|
||||
D88DE: dw 0
|
||||
D88E0: dw 0
|
||||
dir_number: dw 0
|
||||
free_space: dword 0
|
||||
D88DC: WORD 0
|
||||
D88DE: WORD 0
|
||||
D88E0: WORD 0
|
||||
dir_number: WORD 0
|
||||
free_space_low: WORD 0
|
||||
free_space_medium: WORD 0
|
||||
free_space_high: BYTE 0
|
||||
;
|
||||
|
||||
T8B2E: db "000000000"
|
||||
@ -512,50 +515,76 @@ T8B46: db "0 000 000 000",0
|
||||
; [x] ⥯¥àì ¥ «¥§¥â ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ®¢ë© ¯ à ¬¥âà äãªæ¨¨ DskInfo
|
||||
; ¨ ï «®£¨ª ¯®«ãç¥¨ï ¬¥âª¨ ⮬ - á ç « ¨é¥âáï ¢ ª®à¥¢®© ¤¨à¥ªâ®à¨¨,
|
||||
; ¥á«¨ â ¬ ¥â, â® ¡¥àñâáï ¨§ BPB
|
||||
read_disk_info:
|
||||
OR #80
|
||||
LD HL,work_buffer
|
||||
.full+1: LD B,0
|
||||
LD C,Dss.DskInfo
|
||||
RST ToDSS
|
||||
; ” ©«®¢ ï á¨á⥬
|
||||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||||
; Œ¥âª ¤¨áª ¢ BPB
|
||||
EX AF,AF'
|
||||
LD A,(.full)
|
||||
OR A
|
||||
JR Z,.no_full_space_option
|
||||
;
|
||||
; (DE*A)*BC
|
||||
;PUSH HL ; ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||
;PUSH DE ; ᢮¡®¤ëå ª« áâ¥à®¢
|
||||
PUSH BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
EX AF,AF'
|
||||
; !TEST fat 32
|
||||
;LD C,A ; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
;CALL Mult16X8
|
||||
; A:HL = DE*A
|
||||
LD B,0
|
||||
LD C,A
|
||||
EXX
|
||||
PUSH DE
|
||||
EXX
|
||||
POP HL
|
||||
; HL:DE * BC ᢮¡®¤ë¥_ª« áâ¥àë * à §¬¥à_ª« áâ¥à _¢_ᥪâ®à å
|
||||
CALL Mult32
|
||||
; HL:DE = ᢮¡®¤ë¥_ᥪâ®àë
|
||||
;
|
||||
; EX DE,HL
|
||||
; LD H,0
|
||||
; LD L,A
|
||||
POP BC
|
||||
CALL Mult32
|
||||
; HL:DE = ᢮¡®¤®¥ ¬¥áâ® ;!FIXIT ®£à ¨ç¥® 4 £¨£ ¬¨
|
||||
;
|
||||
LD (free_space+2),HL
|
||||
EX DE,HL
|
||||
LD (free_space),HL
|
||||
;
|
||||
read_disk_info: OR #80
|
||||
LD HL,work_buffer
|
||||
.full+1: LD B,0
|
||||
LD C,Dss.DskInfo
|
||||
RST ToDSS
|
||||
; ” ©«®¢ ï á¨á⥬
|
||||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||||
; Œ¥âª ¤¨áª ¢ BPB
|
||||
EX AF,AF'
|
||||
LD A,(.full)
|
||||
OR A
|
||||
JR Z,.no_full_space_option
|
||||
;
|
||||
; max sector (LBA28) #0FFF'FFFF
|
||||
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||
; DE - ᢮¡®¤ëå ª« áâ¥à®¢ low
|
||||
; DE' - ᢮¡®¤ëå ª« áâ¥à®¢ high
|
||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
PUSH IX
|
||||
;
|
||||
PUSH BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
EX AF,AF'
|
||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
;
|
||||
; free_clu_L * clu_size_in_sect
|
||||
LD C,A
|
||||
EX AF,AF'
|
||||
CALL Mult16X8 ; DE*C = A:HL
|
||||
; A:HL = DE*C
|
||||
;
|
||||
; free_clu_H * clu_size_in_sect
|
||||
EXX
|
||||
EX AF,AF'
|
||||
LD C,A
|
||||
PUSH BC
|
||||
CALL Mult16X8 ; DE*C = A:HL
|
||||
; max #0FFF'FFFF sectors for LBA28
|
||||
EX AF,AF'
|
||||
LD D,0
|
||||
LD E,A
|
||||
ADD HL,DE
|
||||
EXX
|
||||
; HL':HL - ᢮¡®¤ëå ᥪâ®à®¢
|
||||
;
|
||||
EX DE,HL
|
||||
POP BC ; à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
PUSH BC
|
||||
CALL Mult_16x16 ; DE*BC = HL:DE.
|
||||
EXX
|
||||
POP BC
|
||||
CALL Mult_16x16 ; DE*BC = HL:DE.
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
EXX
|
||||
EX DE,HL
|
||||
ADD IX,DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
JR NC,.no_inc_HL
|
||||
INC L
|
||||
; ¯®â®¬ã çâ® ¥ ¤®«¦® ¡ëâì ¡®«ìè¥ #001F'FFFF'FE00
|
||||
; ¯à¨ ᥪâ®à¥ ¢ 512 ¡ ©â®¢
|
||||
;
|
||||
.no_inc_HL: LD A,L
|
||||
LD (free_space_high),A
|
||||
LD (free_space_medium),IX
|
||||
EXX
|
||||
LD (free_space_low),DE
|
||||
POP IX
|
||||
;
|
||||
.no_full_space_option:
|
||||
; parse
|
||||
@ -647,8 +676,7 @@ read_disk_info:
|
||||
.good_label:
|
||||
POP HL
|
||||
PUSH HL ; «¨è¥¥
|
||||
|
||||
; ¥áâì ¬¥âª
|
||||
; ¥áâì ¬¥âª
|
||||
volume_label:
|
||||
pop DE ; «¨è¥¥
|
||||
; %5
|
||||
@ -663,7 +691,6 @@ volume_label:
|
||||
call ncopy_string ; ᪮¯¨à. áâபã (á ã«¥¬)
|
||||
ret
|
||||
;
|
||||
|
||||
; ¥á«¨ ¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©ë© ®¬¥à ¤¨áª ¨«¨ ä®à¬ â ¥¨§¢¥áâ¥
|
||||
unknown_serial:
|
||||
; á¥à¨©ë© ®¬¥à ¤¨áª - ¥¨§¢¥á⥠;!HARDCODE ¨¦¥
|
||||
@ -787,51 +814,77 @@ Size2Char:
|
||||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (16*8bit)
|
||||
;<3B> ¢å®¤: DE * C
|
||||
;<3B> ¢ë室:A:HL = १ã«ìâ â
|
||||
Mult16X8:
|
||||
SUB A
|
||||
LD L,A
|
||||
LD H,A
|
||||
CP C
|
||||
RET Z
|
||||
OR D
|
||||
OR E
|
||||
RET Z
|
||||
LD A,C
|
||||
LD C,#00
|
||||
LD B,#08
|
||||
Mlt16x8:
|
||||
ADD HL,HL
|
||||
RLA
|
||||
JR NC,1F
|
||||
ADD HL,DE
|
||||
ADC A,C
|
||||
1: DJNZ Mlt16x8
|
||||
RET
|
||||
Mult16X8: SUB A
|
||||
LD L,A
|
||||
LD H,A
|
||||
CP C
|
||||
RET Z
|
||||
OR D
|
||||
OR E
|
||||
RET Z
|
||||
LD A,C
|
||||
LD C,#00
|
||||
LD B,#08
|
||||
.loop: ADD HL,HL
|
||||
RLA
|
||||
JR NC,.next
|
||||
ADD HL,DE
|
||||
ADC A,C
|
||||
.next: DJNZ .loop
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
;----------------------------------------------------------------------;
|
||||
;<3B>à®æ¥¤ãà 㬮¦¥¨ï (32bit)
|
||||
;<3B> ¢å®¤: HL:DE * BC
|
||||
;<3B> ¢ë室:HL:DE = १ã«ìâ â
|
||||
Mult32:
|
||||
PUSH IX
|
||||
LD IX,#0000
|
||||
LD A,#20
|
||||
EX DE,HL
|
||||
mul32b:
|
||||
ADD IX,IX
|
||||
ADC HL,HL
|
||||
RL E
|
||||
RL D
|
||||
JR NC,noadd1
|
||||
ADD IX,BC
|
||||
JR NC,noadd1
|
||||
INC HL
|
||||
noadd1:
|
||||
DEC A
|
||||
JR NZ,mul32b
|
||||
LD E,LX
|
||||
LD D,HX
|
||||
POP IX
|
||||
RET
|
||||
IFUSED Mult32
|
||||
Mult32: PUSH IX
|
||||
LD IX,#0000
|
||||
LD A,#20
|
||||
EX DE,HL
|
||||
.loop: ADD IX,IX
|
||||
ADC HL,HL
|
||||
RL E
|
||||
RL D
|
||||
JR NC,.no_add
|
||||
ADD IX,BC
|
||||
JR NC,no_add
|
||||
INC HL
|
||||
.no_add: DEC A
|
||||
JR NZ,.loop
|
||||
LD E,LX
|
||||
LD D,HX
|
||||
POP IX
|
||||
RET
|
||||
ENDIF
|
||||
;----------------------------------------------------------------------;
|
||||
;INPUT : DE * BC
|
||||
;OUTPUT: HL:DE
|
||||
Mult_16x16: LD IX,0
|
||||
LD HL,0
|
||||
;
|
||||
LD A,B
|
||||
OR C
|
||||
JR Z,.exit
|
||||
;
|
||||
.loop: SRL B
|
||||
RR C
|
||||
JP NC,.no_add
|
||||
ADD IX,DE
|
||||
JR NC,.no_add
|
||||
INC HL
|
||||
;
|
||||
.no_add: LD A,B
|
||||
OR C
|
||||
JR Z,.exit
|
||||
;
|
||||
SLA E
|
||||
RL D
|
||||
RL L
|
||||
RL H
|
||||
JP .loop
|
||||
;
|
||||
.exit: LD D,XH
|
||||
LD E,XL
|
||||
RET
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -1 +1 @@
|
||||
316
|
||||
320
|
||||
Loading…
Reference in New Issue
Block a user