Release 25/06/2025

This commit is contained in:
Tolik 2025-06-26 19:44:15 +10:00
commit c26759bb4c
27 changed files with 2178 additions and 1575 deletions

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
/.DS_Store
/.tmp
/.vscode
/Build/
/Debug/
/Icon/
/SP_Core.code-workspace
/RUN/
/Docs/

View File

@ -1 +0,0 @@
Ž¯â¨¬ «ì­ë© LZH From : hrumer@gorny.ru  >>ˆ£®àì <20> ¢«®¢ ¢¥¤ñ⠯஥ªâ 7-zip, ®â ­¥£® ¢ ª®­ä¥à¥­æ¨¨ ï >>ã§­ « ¯à®  «£®à¨â¬ optimal lzh - ª®£¤  ¢ë¡¨à ¥âáï >>¤¥©á⢨⥫쭮 ®¯â¨¬ «ì­ë© ᯮᮡ ¯®¤¡®à  áâப ¯à¨ 㦥 >>áãé¥áâ¢ãî饬 ¤¥à¥¢¥ ª®¤®¢ ¤«¨­ ¨ à ááâ®ï­¨©. DB>•€—“íâ®â  «£®à¨â¬. „¥à¦¨! <0A>â®â  «£®à¨â¬ ॠ«ì­® ­ã¦¥­ ª ¦¤®¬ã ¯ ª¥àã ­  ᯥªâà㬥. Ÿ ¤®«- ¦¥­ ¡ë« ¥£® ॠ«¨§®¢ âì ¤«ï ¢á¥å åà㬮¢,åàãá⮢ ¨ « §¥àª®¬¯ ªâ®¢ âà¨-ç¥âëॠ£®¤  ­ § ¤. €©ï©ï© ¢ ®¡é¥¬. „«ï "­ ¬¥à⢮" § è¨âëå ª®¤®¢, ª ª í⮠ᤥ« ­® ¢ ¡®«ì設á⢥ ¯ ª¥à®¢ ­  ᯥª¥, íâ®â  «£®à¨â¬ ¯à¨­¥áñâ ®ª®«®, ¡®îáì ᪠§ âì,2-20%.<08>  ¯ ª¥à å ⨯  RIP¤® ¯à¨¬¥à­®1-10%.<08>â® ­ ¢áª¨¤ªã. Š®­¥ç­®, ¯ ¬ï⨠¬­®£® ­ ¤® ­  ¯ ª®¢ªã, â®à¬®§¨âì ¡ã¤¥â á¥àìñ§­®, ­® ¥áâì à §«¨ç­ë¥ ¢ à¨ ­âë - ­  ªã᪨ ª ª®© ¤«¨­ë à §¡¨âì ä ©« ¨ ¯à®ç¥¥.„  å®âì ­  PC ¬®¦­® ¯ ª®¢ âì. --------åàã¬-------- ˆ£®àì <20> ¢«®¢ ¯¨á « ¢ RU.COMPRESS ¢ 1999 £®¤ã. €«£®à¨â¬ ®¯â¨¬ «ì­®£® Lempel-Ziv-Huffman ª®¤¨à®¢ ­¨ï ---------------------------------------------------- 1) <0A>®¨áª ᮢ¯ ¤¥­¨© ¢ á«®¢ àî ®áãé¥á⢫ï¥âáï ¤«ï ª ¦¤®£® ᬥ饭¨ï. <0A>ਠ¯®¨áª¥ ¤®¯®«­¨â¥«ì­® ᮡ¨à ¥¬ ¨­ä®à¬ æ¨î ®¡ ®¯â¨¬ «ì­ëå (¯® à ááâ®ï­¨î) ᮢ¯ ¤¥­¨ïå á ¤«¨­ ¬¨ ®â2¤® ¤«¨­ë ¬ ªá¨¬ «ì­®£® ᮢ¯ ¤¥­¨ï. Offsets[] = Get_Longest_And_Other_Good_Matches(); // Offsets.Size = length of longest match. // Offsets[i] = back offset in dictionary for match with len=i. BYTE Get_Current_Literal(); // returns current byte 2) ‚ᥣ¤  ¬®¦¥¬ ¯®áç¨â âì, ᪮«ìª® ¯à¥¤¯®«®¦¨â¥«ì­® ¡¨â § ©¬ñâ «î¡®© ¢ à¨ ­â (match/literal) ­  ®á­®¢¥ ¨­ä®à¬ æ¨¨ ® ¯à¥¤ë¤ãé¨å huffman ¡«®ª å: int Get_Match_Huffman_Price(int Length, int Offset); // Length = length of match // Offset = offset of match; // Result = number of bits for coding this match; int Get_Literal_Huffman_Price(BYTE Literal); // Result = number of bits for coding this Literal; 3) Câந¬ ®¯â¨¬ «ì­ãî ¯®á«¥¤®¢ â¥«ì­®áâì ª®¤®¢ ­  ¬­®£® 室®¢ ¢¯¥àñ¤. …áâì ¡®«ì让 ¬ áᨢ a[]: a[i] = {  int Price;// –¥­  ¯ã⨠¢ ¡¨â å,çâ®¡ë ¤®¡à âìáï ¤® i-£® ¡ ©â .  struct  {  int Prev;// <20>®§¨æ¨ï,®âªã¤  ¬ë ¯à룠¥¬ ¢ ⥪ãéãî(=i) ¯®§¨æ¨î  // ¤«ï Literal: Prev = i - 1  // ¤«ï Match'  á ¤«¨­®© Length: Prev = i - Length  int Offset;// ‘¬¥é. ¢ ¡ãä¥à¥(á«®¢ à¥)­ § ¤ ¢ á«ãç ¥ Œatch'   // ¤«ï § ¯¨á¨ Œatch'  ®â Prev ¤® i  } } a) „«ï ¢á¥å í«¥¬¥­â®¢ a[] ãáâ ­ ¢«¨¢ ¥¬ Price = ¡¥áª®­¥ç­®áâì. b) for(int i=0; i < Big_Value; i++) {  // ‘ãé¥áâ¢ãîâ ­¥ª®â®àë¥ ãá«®¢¨ï ¤®áà®ç­®£® ¢ëå. ¨§ í⮣® 横«   // <20>®«ãç ¥¬ ¬ áᨢ Offsets[2..Longest_match_length] ᬥ饭¨© ¢  // ¡ãä¥à¥ (á«®¢ à¥) ­ § ¤, ᬮâਠ1).  Offsets[] = Get_Longest_And_Other_Good_Matches();  for(int Len = 1; Len < Offsets[].Length; Len++)  // Len=1 means Literal  {  // Ž¯à¥¤¥«ï¥¬ 業㠢 ¡¨â å à áᬠâਢ ¥¬®£® "¯à릪 " ­  Len  // ᨬ¢®«®¢ ¢¯¥àñ¤  if (Len == 1) // it's a literal  aPrice = Get_Literal_Huffman_Price(Get_Current_Literal());  else  aPrice = Get_Match_Huffman_Price(Len, Offsets[Len]);  // ¨ ¢ëç¨á«ï¥¬ 業㠭®¢®£® ª ­¤¨¤ â  ¢ a[i + Len].  aNewPrice = a[i].Price + aPrice;  if (aNewPrice < a[i + Len].Price )  // …᫨ ¢ë£®¤­® áâ àë© ¯ãâì (áâ à ï 業  ¬®¦¥â ¡ëâì ¤ ¦¥  // à ¢­  ¡¥áª®­¥ç­®áâ¨,â.¥.¢®®¡é¥ ¥éñ ­¥â ¯ãâ¨) § ¬¥­¨âì  // ­®¢ë¬, â® ¬¥­ï¥¬ a[i + Len], çâ®¡ë ®­ 㪠§ë¢ « ­  i  {  a[i + Len].Price = aNewPrice;  a[i + Len].Prev = i;  a[i + Len].Offset = Offsets[Len];  }  } } c) „¢¨£ ïáì ¯® a[] ®â ª®­æ , ᮡ¨à ¥¬ "®¯â¨¬ «ì­ë¥" match/literal ¯®á«¥¤®¢ â¥«ì­®á⨠¨ ª®¤¨à㥬 ¨å. End. --------åàã¬-------- >> ®¡é¥¬, ¬®¥ ®â­®è¥­¨¥ ᬮâਠ¢ëè¥, ­® ¢®â ¥áâì ¦¥ ¤à㣠ï >>¨­â¥à¥á­ ï ¢¥éì - ¯à®áâ® ¯®¤¤¥à¦ âì à á¯ ª®¢ªãLZMA­  >>ᯥªâà㬥. <20>à ¢¤ , ¬­¥ ª ¦¥âáï, ¡ã¤¥â ­¥ã¤®¡­® ¨á¯®«ì§®¢ âì >>à á¯ ª®¢é¨ªLZMA¤«ï ¯à®£à ¬¬ ­  ᯥªâà㬥. DB><04>® ¬®¦­® ¯à¨¬¥­¨âì ¤«ï ¦ãà­ «®¢ ¨«¨ ¡®«ìè¨å á¯à ¢®ç­¨ª®¢. DB><04> ¯à¨¬¥à,Open Letters­  ®¤­®¬ ¤¨áª¥ ;) >>PS. <20>¥à¥ç¨â « ⢮ñ ¯¨á쬮 ¨ ¯®­ï«, çâ® ¨á室­¨ª¨ ⥡¥ >>¯à¨á« «¨... DB>’ ¬ ¡¥§ ¯®««¨âàë ­¥ ¢ê¥¤¥èì -1021ä ©«,3.4¬¥£ ¡ ©â  DB>¨á室­¨ª®¢. Œãá®àª . <0A>ã, ¯®««¨âà  ­¥ ¯à®¡«¥¬  :). ’ ¬ ¨ á ¯®««¨âன ­¥ ¢ê¥¤¥èì. ’ë ­¥ ¯à®¡®¢ « ¨§ãç¨âì ¯à®áâ® ¤¥ª®¤¥à, â®â, ª®â®àë© ¢ ä ©«¥ \SRC\7zip\Compress\LZMA_C\lzmadecode.c,â ¬ ¢á¥£®23ª¡ :).

View File

@ -1,106 +0,0 @@
Утилита GRFVIEW предназначена для просмотра монохромных или
цветных (мультиколорных) картинок в формате CP/M-редактора GRAF
в режиме 640x200. В самой среде CP/M данные картинки имеют рас-
ширение BLK, однако в OS TASiS оно зарезервировано за драйверами
дисковых устройств и, чтобы избежать путаницы, здесь им было
присвоено "свободное" расширение GRF - производная от названия
редактора. Поэтому, при переносе картинок из CP/M в TASiS не за-
будьте сменить расширение!
Откуда можно раздобыть GRF/BLK-файлы?
1) Нарисовать самостоятельно в графическом редакторе GRAF.
2) Сконвертировать в CP/M из исходных МОНОХРОМНЫХ(!) PCX-файлов
при помощи специальной, прилагающейся к редактору утилиты
PCXBLK.COM. Само-собой, таким способом можно получить только мо-
нохромные картинки. Но их можно вручную раскрасить все в том же
редакторе.
3) Сконвертировать в RetroX (редактор -> Import Picture -> Settings ->
ZX Clones Special -> TurboATM Multicolor Polychrome)... а поскольку сохранять
он не умеет, то сделать скриншот, обрезать картинку (ширина должна делиться
на 8, а высота на 2), сохранить в фотошопе в формате bmp 8bpp (0-й цвет
желательно принудительно задать чёрным), потом сконвертировать утилитой
RetroX to GRF.
ФОРМАТ BLK(GRF)-ФАЙЛА
=====================
Смещение Кол-во Значение
============ ======== ============
#0000 #30(16x3) Палитра. Представляет собой 16 троек
значений GRB-цветов (именно в таком
порядке), представленных в виде сим-
волов ASCII:
"0"(#30) - цвет (G,R или B) выключен
"1"(#31) - цвет низкой интенсивности
"2"(#32) - цвет в режиме BRIGHT 0
"3"(#33) - цвет в режиме BRIGHT 1
Любое другое значение приравнивается
утилитой GRFVIEW к "3".
#0030(*) #03 Метка "GRF" - означает, что за ней
следуют два значащих байта
#0033(*) #01 Рекомендуемые атрибуты (INK & PAPER)
заднего фона, на который налагается
изображение. Актуально для картинок,
по размеру меньших 640x200.
#0034(*) #01 Рекомендуемый цвет бордюра (#00-#0F)
Может быть актуально при использова-
нии нестандартной палитры.
#0035 #4B Не используется. Может быть забито
любым мусором.
#0080(**) #01 X-координата (0-79) левого верхнего
угла выводимой картинки, измеряемая
в столбцах (1 стлб= 8 пикс= 1 байт)
#0081(**) #01 Y-координата (0-199) левого верхнего
угла выводимой картинки, измеряемая
в строчках (1 стр = 1 пиксель)
#0082 #01 WIDTH - ширина картинки в столбцах
(от 1 до 80)
#0083 #01 HIGH - высота картинки в строчках
(от 1 до 200)
#0084 WIDTH*HIGH Растр монохромного изображения.
Представляет собой последователь-
ность слева направо столбцов от
1 до x (x = WIDTH), состоящих из
y байтов каждый (y = HIGH), считая
сверху вниз.
#84+WIDTH*HIGH #nnnn Растр атрибутов. Полная аналогия
растра монохромного изображения по
структуре, с той лишь разницей, что
он прилагается в упакованном по ме-
тоду RLE виде. То есть, представляет
из себя последовательность двухбайт-
ных слов, первый байт в каждом из
которых означает количество (1-255)
последовательно идущих одинаковых
байтов атрибутов, а второй байт -
собственно, само значение атрибута.
----------------------------------
Примечания:
*) НОВОВВЕДЕНИЕ специально для утилиты GRFVIEW. В оригинале -
неиспользуемый участок. Может быть забит любым мусором.
**) Необязательные параметры X и Y картинки, особенно для утили-
ты GRFVIEW, где изображение автоматически центрируется, в соот-
ветствии со своими габаритами.
****************************************************************
 2006, февраль. Тимонин Максим/NedoPC group
****************************************************************
P.S. Стартовый адрес COM-файла в TASiS - 24000DEC

View File

@ -1,11 +0,0 @@
Sprinter ZX
c:\zx\roms\SP_128.BIN
c:\zx\roms\SP__48.BIN
c:\zx\roms\SP_TRD.BIN
c:\zx\roms\SP_EXP.BIN
c:\zx\roms\SP_EXP.BIN
c:\zx\roms\SP_EXP2.BIN
/turbo /7FFD /ret-fn
;

215
For_4x.asm Normal file
View File

@ -0,0 +1,215 @@
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
INCLUDE 'Shared_Includes/structures/FileSystem.inc'
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
; in: HL - CLUSTER
; out: HL:IX - SECTOR
; ‚­ ç «¥ ¤®«¦­  ¡ëâì ¢ë¯®«­¥­  ¨­¨æ¨ «¨§ æ¨ï BPB 4x
CLUSTER_TO_SECTOR:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
EX DE,HL
LD HL,(SYS_PAGE.MSD_DAT_SEC)
LD (.MSD_DAT_SEC),HL
LD HL,(SYS_PAGE.MSD_DAT_SEC2)
LD (.MSD_DAT_SEC2),HL
EX DE,HL
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;
LD DE,0 ;!FIXIT for FAT32
DEC HL
DEC HL
XOR 1
JR Z,.skip
;
RRA
.loop: ADD HL,HL
RL E
RL D
;
RRA
JP NC,.loop
;
.skip: EX DE,HL
LD XL,E
LD XH,D
.MSD_DAT_SEC+1: LD DE,0 ;first data sector ;!FIXIT   ¥á«¨ ­ ç «ì­ë© ᥪâ®à > #FFFF
XOR A
ADD IX,DE
.MSD_DAT_SEC2+1:
LD DE,0
ADC HL,DE
;!TODO   ­ ¤® «¨ ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥ HL:IX?
RET
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
SET_IMAGE_DIR_SECTOR:
LD HL,ONE_FILE
LD DE,TMP_BUFF
LD A,FAT_ATTR.DIRECTORY
LD BC,Dss.F_First.FATname
RST ToDSS
RET C
;
LD HL,(TMP_BUFF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
CALL CLUSTER_TO_SECTOR
LD (RESET_TO_ZX.DIR_SEC_L),IX
LD (RESET_TO_ZX.DIR_SEC_H),HL
RET
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
SET_CURRENT_HDD:
.NUMBER+1: LD A,#FF
CP #FF
LD C,BIOS.HDD_INIT
JP Z,ToBIOS
LD C,BIOS.HDD_PART ; IDE-1/IDE-2
JP ToBIOS
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;
BPB_SetUp: LD A,SYS_PAGE
LD HL,SYS_PAGE.MS_BPB
LD C,BIOS.HDD_READ_BPB
RST ToBIOS
.PARAMS: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.MS_BPB+FORM_CODE)
CP #F0
JP C,.ERROR_BPB
LD DE,SYS_PAGE.MS_BPB+FAT_ID
LD HL,.FAT1_MSG
LD B,4
.L1: LD A,(DE)
CP ' '
JR NZ,.L11
INC DE
JR .L1
.L11: CP (HL)
JR NZ,.PC_DOS
INC HL
INC DE
DJNZ .L1
LD A,(DE)
CP '6'
LD HL,#81FF ; FAT16 ä« £
JR Z,.FAT
CP '2'
JP NZ,.ERROR_BPB
.PC_DOS: LD HL,#01FF ; FAT12 ä« £
.FAT: LD (SYS_PAGE.FAT_FLAG),HL
LD A,(SYS_PAGE.MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
LD (SYS_PAGE.MSD_SECS),A
LD IX,(SYS_PAGE.MS_BPB+SPECIAL_SECS)
LD HL,(SYS_PAGE.MS_BPB+SPECIAL_SECS+2)
.NO_LD_SPECIAL: LD BC,0
LD DE,(SYS_PAGE.MS_BPB+RESERV_SECS)
ADD IX,DE
ADC HL,BC
LD (SYS_PAGE.MSD_FAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à FAT
LD (SYS_PAGE.MSD_FAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à FAT
LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; ç¨á«® ᥪâ®à®¢ ¢ FAT
LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; ª®«¨ç¥á⢮ FATs
.NEXT_ADD:
ADD IX,DE
ADC HL,BC
DEC A
JR NZ,.NEXT_ADD
LD (SYS_PAGE.MSD_CAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à DIR
LD (SYS_PAGE.MSD_CAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à DIR
LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; <20> §¬¥à ᥪâ®à 
LD A,B
RL C
RLA
RL C
RLA
RL C
RLA
LD C,A
LD B,0 ; BC - ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
LD (SYS_PAGE.FilesPerSector),A
LD DE,(SYS_PAGE.MS_BPB+FLS_NUM) ; —¨á«® ä ©«®¢ëå § ¯¨á¥©
EX DE,HL
DEC HL
XOR A
.NEXT_ADD2:
INC A
JR Z,.ERROR_BPB
SBC HL,BC
JR NC,.NEXT_ADD2
EX DE,HL
LD E,A ; A - ç¨á«® ᥪâ®à®¢ ¢ DIR
LD BC,0
LD D,B
LD (SYS_PAGE.SectorsPerCluster),A
ADD IX,DE ; <20> ç «® DATA area
ADC HL,BC
LD (SYS_PAGE.MSD_DAT_SEC),IX
LD (SYS_PAGE.MSD_DAT_SEC2),HL
LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; <20> §¬¥à ᥪâ®à 
; D = 0
LD H,D
LD L,D
LD E,D
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
LD D,A
XOR A
.NEXT_ADD3:
ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à 
ADC A,E
DEC D
JR NZ,.NEXT_ADD3
LD (SYS_PAGE.CLUSTER_LEN),HL
LD B,E
LD C,A
LD (SYS_PAGE.CLUSTER_LEN2),BC
;
; DE=0
EX DE,HL ;LD HL,0
LD BC,(SYS_PAGE.MS_BPB+S_P_T)
LD A,(SYS_PAGE.MS_BPB+H_P_S)
.BPB_L1: ; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD>
ADD HL,BC
DEC A
JR NZ,.BPB_L1
LD (SYS_PAGE.S_X_H),HL
;
EX AF,AF'
OUT (SLOT3),A
AND A
RET
;
.ERROR_BPB:
EX AF,AF'
OUT (SLOT3),A
SCF
RET
;
.FAT1_MSG: DB "FAT1"
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;

@ -1 +1 @@
Subproject commit 80b60f7294ce3eee958a0c4e9a6f29577cee496f
Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1

177
ZXMODE/ZXMODE.FRT Normal file
View File

@ -0,0 +1,177 @@
\ \\\\ menu program for spectrum.exe \\\\ \
VARIABLE MAIN-X
VARIABLE CURS-M
VARIABLE MENU
VARIABLE ITEMS
VARIABLE EXE-POINT
VARIABLE PLACE-M
: M-CB 10 COLOR ! ;
: M-C0 07 COLOR ! ;
: M-C1 70 COLOR ! ;
: M-C2 30 COLOR ! ;
: M-C3 3F COLOR ! ;
: M-C4 01 COLOR ! ;
: CLSM M-CB 100 SET_POS 17 0 DO CLL CR LOOP ;
: MENU" CREATE , , ," ;
: ITEM" , ," BL WORD FIND IF NAME> , ELSE ABORT" no word!" THEN ;
: END-MENU 0 , ;
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \
19 CONSTANT LEN-F
: EDIT-FNAME EXE-POINT @ PLACE-M @ OVER C@ LEN-F - + SET_POS C@+ + LEN-F - LEN-F 1- (EXPECT) ;
: EDIT-CNAME EXE-POINT @ PLACE-M @ OVER C@ 0D - + SET_POS C@+ + 0D - 0C (EXPECT) ;
: NO-ESC ;
: H-LINE M-C3 1800 SET_POS CLL 1801 SET_POS ;
: NEW-MENU M-C1 PLACE-M @ SET_POS EXE-POINT @ C@+ TYPE MENU ! CLSM ;
: M-EXIT M-C0 CLS BYE ;
: RET-MAIN MAIN-X @ MENU @ = IF M-EXIT THEN
H-LINE ." Ret to Main " MAIN-X @ NEW-MENU ;
: NO-FN H-LINE ." no function " ;
1 0E1B MENU" TRDS TRD files "
1 ITEM" Disk A: testfile.trd " EDIT-FNAME
1 ITEM" Disk B: " EDIT-FNAME
1 ITEM" Disk C: " EDIT-FNAME
1 ITEM" Disk D: " EDIT-FNAME
1 ITEM" Main Menu <esc> " RET-MAIN
END-MENU
1 21B MENU" ROMS ROM Menu "
1 ITEM" BASIC48 basic48.bin " EDIT-FNAME
1 ITEM" BASIC128 basic128.bin " EDIT-FNAME
1 ITEM" TR-DOS trdos5s.bin " EDIT-FNAME
1 ITEM" EXPANSION exp.bin " EDIT-FNAME
1 ITEM" BIOS1 exp.bin " EDIT-FNAME
1 ITEM" BIOS2 exp2.bin " EDIT-FNAME
1 ITEM" Main Menu <esc> " RET-MAIN
END-MENU
1 414 MENU" CONFIG Options Menu "
1 ITEM" Turbo Yes " NO-FN
1 ITEM" Sprinter ports Yes " NO-FN
1 ITEM" Port 1FFD Yes " NO-FN
1 ITEM" Port 7FFD Yes " NO-FN
1 ITEM" 512Kb Memory No " NO-FN
1 ITEM" Original Int No " NO-FN
1 ITEM" Scorpion Int No " NO-FN
1 ITEM" 312 screen lines No " NO-FN
1 ITEM" Start TR-DOS No " NO-FN
1 ITEM" Install only No " NO-FN
1 ITEM" Reset to ZX Yes " NO-FN
1 ITEM" Main Menu <esc> " RET-MAIN
END-MENU
1 D03 MENU" STAN Standards "
1 ITEM" Sprinter ZX " NO-FN
1 ITEM" ZX Spectrum " NO-FN
1 ITEM" Pentagon 128 " NO-FN
1 ITEM" Scorpion 256 " NO-FN
1 ITEM" Pentagon 512 " NO-FN
1 ITEM" Main Menu <esc> " RET-MAIN
END-MENU
1 512 MENU" SPEC Specials "
1 ITEM" Save your MODE " NO-FN
1 ITEM" Save utility " NO-FN
1 ITEM" Main Menu <esc> " RET-MAIN
END-MENU
: START-ZX H-LINE ." Start SPECTRUM.EXE" ;
: STANDARD H-LINE ." Choose standard mode" STAN NEW-MENU ;
: CONFIG-ZX H-LINE ." Set Spectrum MODE options" CONFIG NEW-MENU ;
: ROM-SET H-LINE ." Set Spectrum ROM files" ROMS NEW-MENU ;
: TRD-FILES H-LINE ." Set TR-DOS disk images" TRDS NEW-MENU ;
: SPECIALS H-LINE ." Special functions" SPEC NEW-MENU ;
1 203 MENU" MAIN Main Menu " ( pos,curs,"name" )
1 ITEM" Mode: Sprinter ZX " EDIT-CNAME
1 ITEM" Start " START-ZX ( type "name" word )
1 ITEM" Standard modes " STANDARD
1 ITEM" Options " CONFIG-ZX
1 ITEM" ROM files " ROM-SET
1 ITEM" Disk image files " TRD-FILES
1 ITEM" Specials " SPECIALS
1 ITEM" Exit <esc> " M-EXIT
END-MENU
MAIN MAIN-X !
: CURS-TYPE CURS-M @ 0=
IF GET_POS PLACE-M ! DUP EXE-POINT ! C@+ M-C2 TYPE M-C1 ELSE C@+ TYPE THEN
-1 CURS-M +! 1 ITEMS +! ;
: HEAD ( len -> ) GET_POS SWAP M-C1 C" É EMIT 0 DO C" Í EMIT LOOP C" » EMIT 100 + SET_POS ;
: TEXT ( len -> ) GET_POS OVER M-C1 C" º EMIT CURS-TYPE C" º EMIT M-C4 ." ±±" 100 + SET_POS ;
: LINE ( len -> ) GET_POS SWAP M-C1 C" Ç EMIT 0 DO C" Ä EMIT LOOP C" ¶ EMIT M-C4 ." ±±" 100 + SET_POS ;
: ENDS ( l->) GET_POS OVER M-C1 C" È EMIT 0 DO C" Í EMIT LOOP C" ¼ EMIT M-C4 ." ±±"
102 + SET_POS 2 + C" ± SWAP 0 DO DUP EMIT LOOP DROP ;
MAIN MENU !
: PRINT-MENU COLOR @ M-C1 ITEMS 0! EXE-POINT 0!
MENU @
DUP @ SET_POS 2 +
DUP @ CURS-M ! 2 +
DUP C@ HEAD TEXT DUP C@ LINE DUP C@ SWAP C@+ +
BEGIN DUP @ 0<> WHILE
2 + TEXT C@+ + 2 + REPEAT
DROP ENDS COLOR ! ;
: CURS-UP MENU @ 2 + DUP @ 1- 1 MAX SWAP ! ;
: CURS-DN MENU @ 2 + DUP @ 1+ ITEMS @ 1- MIN SWAP ! ;
: CURS-HOME 1 MENU @ 2 + ! ;
: CURS-END ITEMS @ 1- MENU @ 2 + ! ;
: EXE-MENU M-C0 EXE-POINT @ ?DUP IF C@+ + @ EXECUTE THEN ;
: KEY-MENU WAIT-KEY
DUP [ SYS-ID 011B AND SYS-ID NOT 011B AND OR ] LITERAL = IF DROP RET-MAIN EXIT THEN ( ESC )
DUP [ SYS-ID 4400 AND SYS-ID NOT 4400 AND OR ] LITERAL = IF DROP RET-MAIN EXIT THEN ( F10 )
DUP [ SYS-ID 5200 AND SYS-ID NOT 5000 AND OR ] LITERAL = IF DROP CURS-DN EXIT THEN ( Down )
DUP [ SYS-ID 5800 AND SYS-ID NOT 4800 AND OR ] LITERAL = IF DROP CURS-UP EXIT THEN ( Up )
DUP [ SYS-ID 280D AND SYS-ID NOT 1C0D AND OR ] LITERAL = IF DROP EXE-MENU EXIT THEN ( Up )
\ DUP [ SYS-ID D400 AND SYS-ID NOT 7300 AND OR ] LITERAL = IF DROP W-LEFT EXIT THEN ( <ctrl )
\ DUP [ SYS-ID D600 AND SYS-ID NOT 7400 AND OR ] LITERAL = IF DROP W-RIGHT EXIT THEN ( ctrl> )
\ DUP [ SYS-ID 5400 AND SYS-ID NOT 4B00 AND OR ] LITERAL = IF DROP -POS EXIT THEN ( <- )
\ DUP [ SYS-ID 5600 AND SYS-ID NOT 4D00 AND OR ] LITERAL = IF DROP +POS EXIT THEN ( -> )
\ DUP [ SYS-ID 0F09 AND SYS-ID NOT 0F09 AND OR ] LITERAL = IF DROP TAB+ EXIT THEN ( tab )
\ DUP [ SYS-ID 8F09 AND SYS-ID NOT 0F00 AND OR ] LITERAL = IF DROP TAB- EXIT THEN ( <tab )
\ DUP [ SYS-ID 0E08 AND SYS-ID NOT 0E08 AND OR ] LITERAL = IF DROP DELX EXIT THEN ( <del )
\ DUP [ SYS-ID 8E00 AND SYS-ID NOT 0E7F AND OR ] LITERAL = IF DROP DELW EXIT THEN ( ctrl<del )
DUP [ SYS-ID 5700 AND SYS-ID NOT 4700 AND OR ] LITERAL = IF DROP CURS-HOME EXIT THEN ( home )
DUP [ SYS-ID D700 AND SYS-ID NOT 7700 AND OR ] LITERAL = IF DROP CURS-HOME EXIT THEN ( ctrl.home )
DUP [ SYS-ID 5100 AND SYS-ID NOT 4F00 AND OR ] LITERAL = IF DROP CURS-END EXIT THEN ( end )
DUP [ SYS-ID D100 AND SYS-ID NOT 7500 AND OR ] LITERAL = IF DROP CURS-END EXIT THEN ( ctrl.end )
DROP ;
: LOOP-M M-CB CLS S0 @ SP! R0 @ RP!
MAIN MENU ! CURS-HOME
H-LINE 0 SET_POS M-C3 CLL ." Spectrum.exe config utility version 0.02"
BEGIN
PRINT-MENU KEY-MENU AGAIN ;
BL WORD NO-ESC FIND DROP NAME> ESC-W !
TRUE H-FLAG !
07 COLOR !
MAKE LOOP-M
\ PC> INC-END SAVE-SYSTEM _test.com
\ SP> INC-END SAVE-SYSTEM zxmode.exe
CLS LOOP-M
BYE

19
ZXMODE/_HELP.FRT Executable file
View File

@ -0,0 +1,19 @@
\ !! DO NOT EDIT THIS FILE !!
M-C0 100 SET_POS
CLL CR
CLL .( This is a help page ¿)
CLL .( ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ)
CLL CR
CLL .( Main keys: F1 - help F10 - Terminate program)
CLL .( Down - cursor DOWN Up - cursor UP)
CLL .( Home - cursor to 1-st line End - cursor to last)
CLL .( Enter - Execute ESC - Exit from menu)
CLL CR
CLL .( Special keys: Ctrl+left - Shift menu Left)
CLL .( Ctrl+right - Shift menu Right)
CLL .( Ctrl+PageUp - Shift menu Up)
CLL .( Ctrl+PageDown - Shift menu Down)
CLL CR
CLL .( --*** press any key ***--) CLL CR
M-CB WAIT-KEY MENU @ NEW-MENU

View File

@ -1,71 +0,0 @@
; Œ ªà®áë  ªá¥«¥à â®à  ¤«ï ªà á®âë))
;--------[¢ëª«îç¨âì  ªá¥«¥à â®à]--------
MACRO ACC_Off
ld b,b
ENDM
;---------------------------------------
;---------[०¨¬ ¯à¨¥¬  ¡ ©â ]----------
MACRO ACC_SetBlockSize
ld d,d
; ¢ª«îç ¥â  ªá¥«¥à â®à ¢ ०¨¬ ¯à¨¥¬ 
; ¡ ©â  à §¬¥à  ¡«®ª  ¤ «¥¥ á«¥¤ã¥â
; ª®¬ ­¤  ⨯  LD A,dat, £¤¥ dat ¨ ¡ã¤¥â
; ­®¢ë¬ à §¬¥à®¬ ¡«®ª . …᫨ à §¬¥à
; ¡«®ª  ¡ë« ãáâ ­®¢«¥­ à ­¥¥, ¥£® ¬®¦­®
; ­¥ ãáâ ­ ¢«¨¢ âì.
ENDM
;---------------------------------------
;-------[§ ¯®«­¥­¨¥ ®¤­¨¬ ¡ ©â®¬]-------
MACRO ACC_FillOneByte
ld c,c
; ޝ¥à æ¨ï Fill. <20>®á«¥¤ãîé ï ª®¬ ­¤ 
; ⨯  LD (HL),A ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î
; 㪠§ ­­®£® à ­¥¥ ª®«¨ç¥á⢠ ¡ ©â
; §­ ç¥­¨¥¬ A
ENDM
;---------------------------------------
;----[§ ¯®«­¥­¨¥ ¢¥à⨪ «ì­ëå «¨­¨©]----
;ޝ¥à æ¨ï Fill ¤«ï £à ä¨ç¥áª®£® íªà ­ .
MACRO ACC_FillScreenOneByte
ld e,e
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD (HL),A
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î §­ ç¥­¨¥¬ A
; ¢¥à⨪ «ì­ëå «¨­¨© íªà ­  㪠§ ­­ë¬
; à ­¥¥ ª®«¨ç¥á⢮¬ ¡ ©â
ENDM
;---------------------------------------
;----------[ª®¯¨à®¢ ­¨¥ ¡«®ª ]----------
MACRO ACC_CopyBlock
ld l,l
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD A,(HL)
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î އ“  ªá¥«¥à â®à 
; ¤ ­­ë¬¨ ¨§  ¤à¥á  (HL),   ª®¬ ­¤  ⨯ 
; LD (DE),A ¯à¨¢¥¤¥â ª ¯¥à¥§ ¯¨á¨ ¤ ­­ëå
; ¨§ އ“  ªá¥«¥à â®à  ¢ ®á­®¢­®¥ ¨«¨
; ¢¨¤¥®-އ“.
ENDM
;---------------------------------------
;---[ª®¯¨à®¢ ­¨¥ £à ä¨ç¥áª®£® ¡«®ª ]----
MACRO ACC_CopyScreenBlock
ld a,a
; ª®¯¨à®¢ ­¨¥ ¡«®ª  ¤«ï £à ä. íªà ­ .
; <20>®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD A,(HL)
; ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î އ“  ªá¥«¥à â®à 
; ¤ ­­ë¬¨ ¨§  ¤à¥á  (HL),   ª®¬ ­¤  ⨯ 
; LD (DE),A ¯à¨¢¥¤¥â ª ¯¥à¥§ ¯¨á¨ ¤ ­­ëå
; ¨§ އ“  ªá¥«¥à â®à  ¢ ¢¨¤¥®-އ“
; ¢¥à⨪ «ì­ë¬¨ «¨­¨ï¬¨.
ENDM
;---------------------------------------
;--------------[Reserved]---------------
MACRO ACC_Reserved
LD H,H
ENDM
;---------------------------------------

View File

@ -1,73 +0,0 @@
;
MACRO FRAM_ON
IN A,(FastRAM_ON)
IF Emulator
PUSH BC
PUSH AF
LD BC,#1FFD
XOR A
OUT (C),A
OUT (FastRam_BANK0),A
POP AF
POP BC
ENDIF
ENDM
MACRO FRAM_OFF
IN A,(FastRAM_OFF)
IF Emulator
PUSH BC
PUSH AF
LD BC,#1FFD
LD A,1
OUT (C),A
XOR A
OUT (FastRam_BANK0),A
POP AF
POP BC
ENDIF
ENDM
;
;
MACRO PrintProc
MODULE PrintF
;---------------------------------------
printstr:
; ¢ ॣ. HL  ¤à¥á ­  ¯¥ç â ¥¬ë© ¡ãä¥à
LD C,Dss.PChars
jp ToDSS
;---------------------------------------
;---------------------------------------
; ¢ ॣ. A ç¨á«® ¯¥ç â ¥¬®¥ ª ª hex
printhex:
LD D,A
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#30
CP #3A
JR C,.PRNH1
ADD A,7
.PRNH1:
CALL .PRINT_CHAR
LD A,D
AND #0F
ADD A,#30
CP #3A
JP C,.PRINT_CHAR
ADD A,7
JP .PRINT_CHAR
; ¢ ॣ¨áâॠA ᨬ¢®« ¤«ï ¯¥ç â¨
.PRINT_CHAR:
LD BC,#0182
JP ToBIOS
;---------------------------------------
ENDMODULE
ENDM
;
;

10
param.txt Normal file
View File

@ -0,0 +1,10 @@
‘âப  1: Scorpion 256
‘âப  2: c:\zx\roms\SC_128.BIN
‘âப  3: c:\zx\roms\SC__48.BIN
‘âப  4: c:\zx\roms\SC_TRD.BIN
‘âப  5: c:\zx\roms\SC_EXP.BIN
‘âப  6: c:\zx\roms\SC_EXP.BIN
‘âப  7: c:\zx\roms\SP_EXP2.BIN
‘âப  8: /turbo /sprinter /7FFD /1FFD /ret-zx /load-pal
‘âப  9: c:\zx\palette\komod.pal
‘âப  10: ;

File diff suppressed because it is too large Load Diff

View File

@ -33,24 +33,22 @@ 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
; 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 §­ ç¥­¨¥ º
@ -64,19 +62,18 @@ SYS_SECTOR:
; º #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
*/
; 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
Name BLOCK 8
Type BYTE
Start WORD
Length WORD
@ -95,215 +92,210 @@ FileBlock CAT_Elements
; 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
;-------[Œ¥âª  ¤¨áª  - ¨¬ï ä ©« ]-------
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
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 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
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,(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
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,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
ADD HL,BC
ld de,SclOffsets.FileBlock
add hl,de ; ¢ HL à §¬¥à ®â ­ ç «  SCL ¤® ­ ç «  ¡«®ª  ¤ ­­ëå (header_length)
push hl
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 ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
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
POP HL
RET
1: push ix
pop de ; §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« 
ex (sp),hl ; §­ ç¥­¨¥ header_length ¢ HL, áâ àè ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ex de,hl ; ¢ HL §­ ç¥­¨¥ ¬« ¤è¨å 16 ¡¨â à §¬¥à  ä ©« , ¢ DE - header_length
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 áâ àè ï ç áâì à §¬¥à  ä ©« 
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,#1000
ADD HL,DE
ex (sp),hl ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
ld de,0
adc hl,de
pop de ; âãâ ¢ hl:de à §¬¥à ¤«ï trd
EX (SP),HL ; ¬« ¤è ï ç áâì à §¬¥à  ä ©«  ­  á⥪¥
LD DE,0
ADC HL,DE
POP DE ; âãâ ¢ hl:de à §¬¥à ¤«ï trd
;---------------------------------------
call Get_RAM_Disk_E
ret c ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
CALL Get_RAM_Disk_E
RET C ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
Convert_SCLtoTRD:
LD A,(Load_IMAGE_File.MEM_BLK)
OUT (SLOT3),A ; ¢áâ ¢«ï¥¬ ¯¥à¢ãî áâà ­¨æã RAM-¤¨áª 
LD A,(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)
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
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
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
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
INC HL ; Pointer on next filename in SCL_Buffer
POP BC
DJNZ .cat_loop
xor a
ld (de),a ; file table end marker
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
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 ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
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
POP DE
RET
1: di
ld hl,SYS_SECTOR_START
ld de,#C800 ; sys sector of tr-dos disk in bank3 of ram-disk
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
LD A,0
ACC_CopyBlock
ld a,(HL)
ld (DE),a
LD A,(HL)
LD (DE),A
ACC_Off
; ei
;EI
LD A,(IMAGE_HANDLER)
LD HL,#D000 ; ¤®£à㧨âì ¤® ª®­æ  áâà ­¨æë
LD DE,#3000
LD C,Dss.Read
RST ToDSS
JP C,ERROR_IN_READ ; ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
JP C,ERROR_IN_READ ;!FIXIT ®¡à ¡®â稪 ®è¨¡ª¨!!!!!
LD HL,MSG_LOAD_IMAGE ; loading image
LD C,Dss.PChars
@ -314,8 +306,8 @@ Convert_SCLtoTRD:
RST ToDSS
DI
LD A,(MEM_BLK)
jp Load_IMAGE_File.scl_read_next
LD A,(Load_IMAGE_File.MEM_BLK)
JP Load_IMAGE_File.scl_read_next
;-----------[]
@ -328,9 +320,6 @@ SYS_SECTOR SEEK
SYS_SECTOR_END: BLOCK 3,0
SCL_FILE_ID: DB 0
;-----------[¢ á ¬ë© ª®­¥æ]-------------
SCL_Buffer EQU $
assert SCL_Buffer+#701 < #C000, "Buffer out of mem bank 2"
; ;-----------[¢ á ¬ë© ª®­¥æ]-------------
; SCL_Buffer EQU $
; ASSERT SCL_Buffer+#701<#A000,"Buffer out of mem bank 2"

View File

@ -4,5 +4,11 @@
sj.insert_define("BUILD_DATE", "'" .. date .. "." .. month .. "." .. year .. "'")
ENDLUA
DEFINE SP_VERSION "2.01 beta build"
DEFINE SP_VERSION "2.03 beta build"
;
DEFINE NEED_MIN_DSS_VERSION '1.71.36'
DSS_MIN_VERS:
.vers EQU 1
.modf EQU 71
.build EQU 36
;