Spectrum.EXE/trdscl.a80

325 lines
8.2 KiB
Plaintext
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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; C«ã¦¥¡­ë© (¤¥¢ïâë© c¥ªâ®p ¢ ®¡« c⨠ª â «®£ ) ¨c¯®«ì§ã¥âcï c¨c⥬®©
; ¤«ï åp ­¥­¨ï ¨­ä®p¬ æ¨¨ ® c ¬®© ¤¨cª¥â¥. â ¡«¨æ¥ ¯p¨¢¥¤¥­ ¥£® ä®p¬ â:
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; ºC¬¥é¥­¨¥ ®â ³ „«¨­  ³ ‡­ ç¥­¨¥ º
; º­ ç «  c¥ªâ®p  ³ ³ º
; ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ
; º #00 ³ 1 ³ <20> ©â 0 º
; º #01 ³ 224 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º
; º #E1 ³ 1 ³ H®¬¥p ¯¥p¢®£® ­¥§ ­ï⮣® c¥ªâ®p  ­  ¤¨cª¥ º
; º #E2 ³ 1 ³ H®¬¥p ¤®p®¦ª¨ ¯¥p¢®£® ­¥§ ­ï⮣® c¥ªâ®p  º
; º #E3 ³ 1 ³ ’¨¯ ¤¨cª¥âë º
; º #E4 ³ 1 ³ Š®«¨ç¥c⢮ ä ©«®¢ º
; º #E5 ³ 2 ³ Š®«¨ç¥c⢮ c¢®¡®¤­ëå c¥ªâ®p®¢ º
; º #E7 ³ 1 ³ ˆ¤¥­â¨ä¨ª æ¨®­­ë© ª®¤ TR-DOS (#10) º
; º #E8 ³ 2 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º
; º #EA ³ 9 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 32) º
; º #F3 ³ 1 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º
; º #F4 ³ 1 ³ Š®«¨ç¥c⢮ 㤠«¥­­ëå ä ©«®¢ º
; º #F5 ³ 8 ³ H §¢ ­¨¥ ¤¨cª¥âë º
; º #FD ³ 3 ³ H¥ ¨c¯®«ì§ã¥âcï (§ ¯®«­¥­® ¡ ©â®¬ 0) º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
STRUCT SEEK
FirstFreeSec BYTE 0
FirstFreeTrk BYTE 1
DiskType BYTE #16
AllFilesNum BYTE 0
FreeSectors WORD 0 ; beta version
TRDOS_ID BYTE #10
notuse1 WORD 0
notuse2 BLOCK 9,32
notuse3 BYTE 0
DelFilesNum BYTE 0
DiskName TEXT 8,{" "} ; beta version
ENDS
; SYS_SECTOR:
; DB 0
; BLOCK 224,0
; .FirstFreeSec: DB 0
; .FirstFreeTrk: DB 1
; .DiskType DB #16 ; #16 = 80-2, #17 = 40-2, #18 = 80-1, #19 = 40-1
; .AllFilesNum: DB 0
; .FreeSectors: DW 2544
; DB #10
; DW 0000
; BLOCK 9,32
; DB 0
; .DelFilesNum: DB 0
; .DiskName: BLOCK 8,32
; BLOCK 3,0
;
; ÉÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; ºC¬¥é¥­¨¥ ³„«¨­ ³ H §­ ç¥­¨¥ º
; º®â ­ ç « ³ ³ º
; ÇÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
; º #00 ³ 8 ³ ˆ¬ï ä ©«  º
; º #08 ³ 1 ³ ’¨¯ ä ©«  º
; º #09 ³ 2 ³ <20> p ¬¥âp START º
; º #0B ³ 2 ³ <20> p ¬¥âp LENGTH º
; º #0D ³ 1 ³ Š®«¨ç¥c⢮ c¥ªâ®p®¢ º
; º #0E ³ 1 ³ H®¬¥p 1£® c¥ªâ®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
Name BLOCK 8
Type BYTE
Start WORD
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
; 80 tracks * 2 heads * 16 sectors * 256 bites = 655360 kb
; 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,'.'
LD BC,0008
LD DE,SYS_SECTOR.DiskName
.loop:
CP (HL)
JR Z,.skip
LDI
JP PE,.loop
.skip:
;-------[¯à®¢¥àª  奤íà  SINCLAIR]------
LD A,(IMAGE_HANDLER)
LD HL,SCL_Buffer
LD DE,8 ; ¡ ©â®¢
LD C,Dss.Read
RST ToDSS
RET C ; ®¡à ¡®â稪 ®è¨¡ª¨
LD HL,SCL_Buffer
LD DE,SCL_HEADER
LD B,8
.check_header: LD A,(DE)
CP (HL)
JR NZ,.error_header
INC HL
INC DE
DJNZ .check_header
JR .get_size
.error_header: SCF
RET
;------[¢ëç¨á«¥­¨¥ à §¬¥à  ¤«ï TRD]-----
.get_size:
; LD A,(IMAGE_HANDLER)
; LD HL,0
; LD IX,SclOffsets.Files
; LD B,L
; LD C,Dss.Move_FP
; RST ToDSS ; 㪠§ â¥«ì ­  ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
; RET C ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
LD A,(IMAGE_HANDLER)
LD HL,SCL_Buffer
LD DE,#701
LD C,Dss.Read
RST ToDSS ; !FIXIT ᤥ« âì ª®­âà®«ì ®è¨¡ª¨? ; ç¨â ¥¬ ¡ ©â ª®«¨ç¥á⢠ ¡«®ª®¢ (ä ©«®¢)
;
LD A,(SCL_Buffer)
LD L,A
XOR A
LD H,A
;
ADD HL,HL ;*2
PUSH HL
ADD HL,HL ;*4
LD D,H
LD E,L
ADD HL,HL ;*8
ADD HL,DE ;*12
POP DE
ADD HL,DE ; ¢ HL §­ ç¥­¨¥ A*14
ADD HL,BC
LD DE,SclOffsets.FileBlock
ADD HL,DE ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length)
PUSH HL
;
LD A,(IMAGE_HANDLER)
LD HL,0
LD IX,4 ; ¨£­®à¨¬ ª®­â஫ì­ãî á㬬ã scl ä ©« 
LD B,2
LD C,Dss.Move_FP
RST ToDSS ; 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
JR NC,1F ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
POP HL
RET
1: PUSH IX
POP DE ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« 
EX (SP),HL ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
EX DE,HL ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length
SBC HL,DE
LD DE,0
EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
SBC HL,DE ; ¢ HL áâ àè ï ç áâì à §¬¥à  ä ©« 
EX (SP),HL ; áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
LD DE,#1000
ADD HL,DE
EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
LD DE,0
ADC HL,DE
POP DE ; âãâ ¢ hl:de à §¬¥à ¤«ï trd
;---------------------------------------
CALL Get_RAM_Disk_E
RET C ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
Convert_SCLtoTRD:
LD A,(Load_IMAGE_File.MEM_BLK)
OUT (SLOT3),A ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª 
LD HL,SCL_Buffer
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 A,(SYS_SECTOR.FirstFreeSec)
LD (DE),A
LD C,A ;!---[v 1]
INC DE
LD A,(SYS_SECTOR.FirstFreeTrk)
LD (DE),A
INC DE ; Pointer on next filename in RAM drive
DEC HL ; set to number of sectors
LD A,(HL) ; get file length in sectors from scl-table
AND #0F
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
POP BC
DJNZ .cat_loop
XOR A
LD (DE),A ; file table end marker
;---------------------------------------
;!TODO „®¤¥« âì!!!!!
; SYS_SECTOR.FreeSectors
; push hl ; ¡ ©â ¢ ¡ãä¥à¥ ®âªã¤  ¢ SCL ­ ç¨­ îâáï ¤ ­­ë¥ (HL-SCL_Buffer)
; push de ; ¡ ©â ¢ ram ¤¨áª¥ trd £¤¥ § ª ­ç¨¢ ¥âáï â ¡«¨æ  ¯®á«¥¤­¥£® ä ©« 
XOR A
LD DE,SCL_Buffer-8 ; ¢ëç¨á«ï¥¬ §­ ç¥­¨¥ ᬥ饭¨ï ¢ ä ©«¥ ¨§ §­ ç¥­¨ï ᬥ饭¨ï ¢ ¡ãä¥à¥
SBC HL,DE
PUSH HL
POP IX
LD A,(IMAGE_HANDLER)
LD HL,0
LD B,L ; b=0 - ®â ­ ç «  ä ©« 
LD C,Dss.Move_FP
RST ToDSS ; 㪠§ â¥«ì ­  ¯¥à¢ë© ¡ ©â ¤ ­­ëå
JR NC,1F ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
POP DE
RET
1: DI
LD HL,SYS_SECTOR_START
LD DE,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk
ACC_SetBlockSize
LD A,0
ACC_CopyBlock
LD A,(HL)
LD (DE),A
ACC_Off
;EI
LD A,(IMAGE_HANDLER)
LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë
LD DE,#3000
LD C,Dss.Read
RST ToDSS
JP C,ERROR_IN_READ ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
LD HL,MSG_LOAD_IMAGE ; loading image
LD C,Dss.PChars
RST ToDSS
LD HL,PROGRES_IND ; loading TRD
LD C,Dss.PChars
RST ToDSS
DI
LD A,(Load_IMAGE_File.MEM_BLK)
JP Load_IMAGE_File.scl_read_next
;-----------[]
SCL_HEADER: DB 'SINCLAIR'
;------------[¯¥à¥¬¥­­ë¥]---------------
SYS_SECTOR_START:
DB 0
BLOCK 224,0
SYS_SECTOR SEEK
SYS_SECTOR_END: BLOCK 3,0
SCL_FILE_ID: DB 0
; ;-----------[¢ á ¬ë© ª®­¥æ]-------------
; SCL_Buffer EQU $
; ASSERT SCL_Buffer+#701<#A000,"Buffer out of mem bank 2"