New vROM support, added set CONFIG_DE, refactoring

This commit is contained in:
Anatoliy Belyanskiy 2023-06-24 23:35:41 +10:00
parent 4e38b3e1ec
commit 29b442dbe6
2 changed files with 1032 additions and 1094 deletions

File diff suppressed because it is too large Load Diff

View File

@ -19,38 +19,36 @@
; º #F5 ³ 8 ³ H §¢ ­¨¥ ¤¨cª¥âë º ; º #F5 ³ 8 ³ H §¢ ­¨¥ ¤¨cª¥âë º
; º #FD ³ 3 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º ; º #FD ³ 3 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
STRUCT SEEK STRUCT SEEK
FirstFreeSec BYTE 0 FirstFreeSec BYTE 0
FirstFreeTrk BYTE 1 FirstFreeTrk BYTE 1
DiskType BYTE #16 DiskType BYTE #16
AllFilesNum BYTE 0 AllFilesNum BYTE 0
FreeSectors WORD 0 ; beta version FreeSectors WORD 0 ; beta version
TRDOS_ID BYTE #10 TRDOS_ID BYTE #10
notuse1 WORD 0 notuse1 WORD 0
notuse2 BLOCK 9,32 notuse2 BLOCK 9,32
notuse3 BYTE 0 notuse3 BYTE 0
DelFilesNum BYTE 0 DelFilesNum BYTE 0
DiskName TEXT 8, {" "} ; beta version DiskName TEXT 8,{" "} ; beta version
ENDS ENDS
/* ; SYS_SECTOR:
SYS_SECTOR: ; DB 0
DB 0 ; BLOCK 224,0
BLOCK 224,0 ; .FirstFreeSec: DB 0
.FirstFreeSec: DB 0 ; .FirstFreeTrk: DB 1
.FirstFreeTrk: DB 1 ; .DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1
.DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1 ; .AllFilesNum: DB 0
.AllFilesNum: DB 0 ; .FreeSectors: DW 2544
.FreeSectors: DW 2544 ; DB #10
DB #10 ; DW 0000
DW 0000 ; BLOCK 9,32
BLOCK 9,32 ; DB 0
DB 0 ; .DelFilesNum: DB 0
.DelFilesNum: DB 0 ; .DiskName: BLOCK 8,32
.DiskName: BLOCK 8,32 ; BLOCK 3,0
BLOCK 3,0
; ;
*/
; ÉÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ; ÉÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; ºC¬¥é¥­¨¥ ³„«¨­ ³ H §­ ç¥­¨¥ º ; ºC¬¥é¥­¨¥ ³„«¨­ ³ H §­ ç¥­¨¥ º
@ -64,273 +62,267 @@ SYS_SECTOR:
; º #0E ³ 1 ³ H®¬¥p 1£® c¥ªâ®p  º ; º #0E ³ 1 ³ H®¬¥p 1£® c¥ªâ®p  º
; º #0F ³ 1 ³ H®¬¥p ¤®p®¦ª¨ º ; º #0F ³ 1 ³ H®¬¥p ¤®p®¦ª¨ º
; ÈÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ; ÈÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
/*
CAT_ELEMENT:
.Name BLOCK 8,32
.Type DB 0
.Start DW 0000
.Length DW 0000
.Sectors DB 0
.FirstSector DB 0
.FirstTrack DB 0
*/
STRUCT CAT_Elements ; CAT_ELEMENT:
Name block 8 ; .Name BLOCK 8,32
Type BYTE ; .Type DB 0
Start WORD ; .Start DW 0000
Length WORD ; .Length DW 0000
Sectors BYTE ; .Sectors DB 0
FirstSector BYTE ; .FirstSector DB 0
FirstTrack BYTE ; .FirstTrack DB 0
ENDS
STRUCT SclOffsets STRUCT CAT_Elements
ID BLOCK 8 Name BLOCK 8
Files BYTE Type BYTE
FileBlock CAT_Elements Start WORD
ENDS Length WORD
Sectors BYTE
FirstSector BYTE
FirstTrack BYTE
ENDS
STRUCT SclOffsets
ID BLOCK 8
Files BYTE
FileBlock CAT_Elements
ENDS
; 655360 kb = 160 tracks * 16 sectors * 256 bites ; 655360 kb = 160 tracks * 16 sectors * 256 bites
; 80 tracks * 2 heads * 16 sectors * 256 bites = 655360 kb ; 80 tracks * 2 heads * 16 sectors * 256 bites = 655360 kb
; Page = 64 sectors = 4 tracks ; Page = 64 sectors = 4 tracks
;-----------[] ;-----------[]
Load_SCL:
;-------[Œ¥âª  ¤¨áª  - ¨¬ï ä ©« ]-------
ld hl,ONE_FILE
ld de,SCL_Buffer
ld bc,#0300+Dss.EX_Path
rst ToDSS
jr c,.skip
ld hl,SCL_Buffer ;-------[Œ¥âª  ¤¨áª  - ¨¬ï ä ©« ]-------
ld a,'.' Load_SCL: LD HL,ONE_FILE
ld bc,0008 LD DE,SCL_Buffer
ld de,SYS_SECTOR.DiskName LD BC,#0300+Dss.EX_Path
RST ToDSS
JR C,.skip
LD HL,SCL_Buffer
LD A,'.'
LD BC,0008
LD DE,SYS_SECTOR.DiskName
.loop: .loop:
cp (hl) CP (HL)
jr z,.skip JR Z,.skip
ldi LDI
jp pe,.loop JP PE,.loop
.skip: .skip:
;-------[¯à®¢¥àª  奤íà  SINCLAIR]------ ;-------[¯à®¢¥àª  奤íà  SINCLAIR]------
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,8 LD DE,8 ; ¡ ©â®¢
ld c,Dss.Read LD C,Dss.Read
rst ToDSS RST ToDSS
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨ RET C ; ®¡à ¡®â稪 ®è¨¡ª¨
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,SCL_HEADER LD DE,SCL_HEADER
ld b,8 LD B,8
.check_header: .check_header: LD A,(DE)
ld a,(de) CP (HL)
cp (hl) JR NZ,.error_header
jr nz,.error_header INC HL
inc hl INC DE
inc de DJNZ .check_header
djnz .check_header JR .get_size
jr .get_size .error_header: SCF
.error_header: RET
scf
ret
;------[¢ëç¨á«¥­¨¥ à §¬¥à  ¤«ï TRD]----- ;------[¢ëç¨á«¥­¨¥ à §¬¥à  ¤«ï TRD]-----
.get_size: .get_size:
/* ld a,(IMAGE_HANDLER) ; LD A,(IMAGE_HANDLER)
ld hl,0 ; LD HL,0
ld ix,SclOffsets.Files ; LD IX,SclOffsets.Files
ld b,l ; LD B,L
ld c,Dss.Move_FP ; LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢) ; RST ToDSS ; 㪠§ â¥«ì ­  ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! ; RET C ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
;*/
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,SCL_Buffer LD HL,SCL_Buffer
ld de,#701 LD DE,#701
ld c,Dss.Read LD C,Dss.Read
rst ToDSS ; !FIXIT ᤥ« âì ª®­âà®«ì ®è¨¡ª¨? ; ç¨â ¥¬ ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢) RST ToDSS ; !FIXIT ᤥ« âì ª®­âà®«ì ®è¨¡ª¨? ; ç¨â ¥¬ ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
; ;
ld a,(SCL_Buffer) LD A,(SCL_Buffer)
ld l,a LD L,A
xor a XOR A
ld h,a LD H,A
; ;
add hl,hl ;*2 ADD HL,HL ;*2
push hl PUSH HL
add hl,hl ;*4 ADD HL,HL ;*4
ld d,h LD D,H
ld e,l LD E,L
add hl,hl ;*8 ADD HL,HL ;*8
add hl,de ;*12 ADD HL,DE ;*12
pop de POP DE
add hl,de ; ¢ HL §­ ç¥­¨¥ A*14 ADD HL,DE ; ¢ HL §­ ç¥­¨¥ A*14
add hl,bc ADD HL,BC
ld de,SclOffsets.FileBlock LD DE,SclOffsets.FileBlock
add hl,de ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length) ADD HL,DE ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length)
push hl PUSH HL
; ;
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,0 LD HL,0
ld ix,4 ; ¨£­®à¨¬ ª®­â஫ì­ãî á㬬ã scl ä ©«  LD IX,4 ; ¨£­®à¨¬ ª®­â஫ì­ãî á㬬ã scl ä ©« 
ld b,2 LD B,2
ld c,Dss.Move_FP LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ª®­¥æ ä ©«  RST ToDSS ; 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
jr nc,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JR NC,1F ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
pop hl POP HL
ret RET
1: push ix 1: PUSH IX
pop de ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©«  POP DE ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« 
ex (sp),hl ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ex de,hl ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length EX DE,HL ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length
sbc hl,de SBC HL,DE
ld de,0 LD DE,0
ex (sp),hl ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
sbc hl,de ; ¢ HL áâ àè ï ç áâì à §¬¥à  ä ©«  SBC HL,DE ; ¢ HL áâ àè ï ç áâì à §¬¥à  ä ©« 
ex (sp),hl ; áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ld de,#1000 LD DE,#1000
add hl,de ADD HL,DE
ex (sp),hl ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥ EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ld de,0 LD DE,0
adc hl,de ADC HL,DE
pop de ; âãâ ¢ hl:de à §¬¥à ¤«ï trd POP DE ; âãâ ¢ hl:de à §¬¥à ¤«ï trd
;--------------------------------------- ;---------------------------------------
CALL Get_RAM_Disk_E
call Get_RAM_Disk_E RET C ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
Convert_SCLtoTRD: Convert_SCLtoTRD:
LD A,(MEM_BLK)
OUT (SLOT3),A ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª 
LD A,(MEM_BLK) LD HL,SCL_Buffer
out (SLOT3),a ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª  LD B,(HL) ; CAT_Elements
INC HL
LD DE,#C000 ; RAM-drive's track 0
LD IX,SYS_SECTOR
LD (ix+SEEK.AllFilesNum),B
.cat_loop: PUSH BC
LD A,(HL)
CP 1
JR NZ,1F ; this file is not deleted
INC (ix+SEEK.DelFilesNum)
1: LD BC,CAT_Elements-2 ; ld bc,#0D
LDIR ; copy 14 bites of scl files table to trd image catalog
ld hl,SCL_Buffer LD A,(SYS_SECTOR.FirstFreeSec)
ld b,(hl) ; CAT_Elements LD (DE),A
inc hl LD C,A ;!---[v 1]
ld de,#C000 ; RAM-drive's track 0 INC DE
ld ix,SYS_SECTOR LD A,(SYS_SECTOR.FirstFreeTrk)
ld (ix+SEEK.AllFilesNum),b LD (DE),A
.cat_loop: INC DE ; Pointer on next filename in RAM drive
push bc
ld a,(hl)
CP 1
jr nz,1F ; this file is not deleted
inc (ix+SEEK.DelFilesNum)
1: ld bc,CAT_Elements-2 ; ld bc,#0D
ldir ; copy 14 bites of scl files table to trd image catalog
ld a,(SYS_SECTOR.FirstFreeSec) DEC HL ; set to number of sectors
ld (de),a LD A,(HL) ; get file length in sectors from scl-table
ld c,a ;!---[v 1] AND #0F
inc de ADD A,C ;!---[^ 1]
ld a,(SYS_SECTOR.FirstFreeTrk) LD C,A ;!---[v 2]
ld (de),a AND #0F
inc de ; Pointer on next filename in RAM drive LD (SYS_SECTOR.FirstFreeSec),A
LD A,#F0
AND C ;!---[^ 2]
JR Z,1F
INC (ix+SEEK.FirstFreeTrk)
1: LD A,(HL)
SRL A
SRL A
SRL A
SRL A
ADD A,(ix+SEEK.FirstFreeTrk)
LD (SYS_SECTOR.FirstFreeTrk),A
dec hl ; set to number of sectors INC HL ; Pointer on next filename in SCL_Buffer
ld a,(hl) ; get file length in sectors from scl-table POP BC
and #0F DJNZ .cat_loop
add a,c ;!---[^ 1]
ld c,a ;!---[v 2]
and #0F
ld (SYS_SECTOR.FirstFreeSec),a
ld a,#F0
and c ;!---[^ 2]
jr z,1F
inc (ix+SEEK.FirstFreeTrk)
1: ld a,(hl)
srl a
srl a
srl a
srl a
add a,(ix+SEEK.FirstFreeTrk)
ld (SYS_SECTOR.FirstFreeTrk),a
inc hl ; Pointer on next filename in SCL_Buffer XOR A
pop bc LD (DE),A ; file table end marker
djnz .cat_loop
xor a
ld (de),a ; file table end marker
;--------------------------------------- ;---------------------------------------
; „®¤¥« âì!!!!! ;!TODO „®¤¥« âì!!!!!
; SYS_SECTOR.FreeSectors ; SYS_SECTOR.FreeSectors
; push hl ; ¡ ©â ¢ ¡ãä¥à¥ ®âªã¤  ¢ SCL ­ ç¨­ îâáï ¤ ­­ë¥ (HL-SCL_Buffer) ; push hl ; ¡ ©â ¢ ¡ãä¥à¥ ®âªã¤  ¢ SCL ­ ç¨­ îâáï ¤ ­­ë¥ (HL-SCL_Buffer)
; push de ; ¡ ©â ¢ ram ¤¨áª¥ trd £¤¥ § ª ­ç¨¢ ¥âáï â ¡«¨æ  ¯®á«¥¤­¥£® ä ©«  ; push de ; ¡ ©â ¢ ram ¤¨áª¥ trd £¤¥ § ª ­ç¨¢ ¥âáï â ¡«¨æ  ¯®á«¥¤­¥£® ä ©« 
xor a XOR A
ld de,SCL_Buffer-8 ; ¢ëç¨á«ï¥¬ §­ ç¥­¨¥ ᬥ饭¨ï ¢ ä ©«¥ ¨§ §­ ç¥­¨ï ᬥ饭¨ï ¢ ¡ãä¥à¥ LD DE,SCL_Buffer-8 ; ¢ëç¨á«ï¥¬ §­ ç¥­¨¥ ᬥ饭¨ï ¢ ä ©«¥ ¨§ §­ ç¥­¨ï ᬥ饭¨ï ¢ ¡ãä¥à¥
sbc hl,de SBC HL,DE
push hl PUSH HL
pop ix POP IX
ld a,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
ld hl,0 LD HL,0
ld B,L ; b=0 - ®â ­ ç «  ä ©«  LD B,L ; b=0 - ®â ­ ç «  ä ©« 
ld c,Dss.Move_FP LD C,Dss.Move_FP
rst ToDSS ; 㪠§ â¥«ì ­  ¯¥à¢ë© ¡ ©â ¤ ­­ëå RST ToDSS ; 㪠§ â¥«ì ­  ¯¥à¢ë© ¡ ©â ¤ ­­ëå
jr nc,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JR NC,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
pop de POP DE
ret RET
1: di 1: DI
ld hl,SYS_SECTOR_START LD HL,SYS_SECTOR_START
ld de,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk LD DE,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk
ACC_SetBlockSize ACC_SetBlockSize
ld a,0 LD A,0
ACC_CopyBlock ACC_CopyBlock
ld a,(HL) LD A,(HL)
ld (DE),a LD (DE),A
ACC_Off ACC_Off
; ei ;EI
LD A,(IMAGE_HANDLER) LD A,(IMAGE_HANDLER)
LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë
LD DE,#3000 LD DE,#3000
LD C,Dss.Read LD C,Dss.Read
RST ToDSS RST ToDSS
JP C,ERROR_IN_READ ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!! JP C,ERROR_IN_READ ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
LD HL,MSG_LOAD_IMAGE ; loading image LD HL,MSG_LOAD_IMAGE ; loading image
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
LD HL,PROGRES_IND ; loading TRD LD HL,PROGRES_IND ; loading TRD
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
DI DI
LD A,(MEM_BLK) LD A,(MEM_BLK)
jp Load_IMAGE_File.scl_read_next JP Load_IMAGE_File.scl_read_next
;-----------[] ;-----------[]
SCL_HEADER: DB 'SINCLAIR' SCL_HEADER: DB 'SINCLAIR'
;------------[¯¥à¥¬¥­­ë¥]--------------- ;------------[¯¥à¥¬¥­­ë¥]---------------
SYS_SECTOR_START: SYS_SECTOR_START:
DB 0 DB 0
BLOCK 224,0 BLOCK 224,0
SYS_SECTOR SEEK SYS_SECTOR SEEK
SYS_SECTOR_END: BLOCK 3,0 SYS_SECTOR_END: BLOCK 3,0
SCL_FILE_ID: DB 0 SCL_FILE_ID: DB 0
;-----------[¢ á ¬ë© ª®­¥æ]------------- ;-----------[¢ á ¬ë© ª®­¥æ]-------------
SCL_Buffer EQU $ SCL_Buffer EQU $
assert SCL_Buffer+#701 < #C000, "Buffer out of mem bank 2" ASSERT SCL_Buffer+#701<#C000,"Buffer out of mem bank 2"