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 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,19 +62,18 @@ 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: ; CAT_ELEMENT:
.Name BLOCK 8,32 ; .Name BLOCK 8,32
.Type DB 0 ; .Type DB 0
.Start DW 0000 ; .Start DW 0000
.Length DW 0000 ; .Length DW 0000
.Sectors DB 0 ; .Sectors DB 0
.FirstSector DB 0 ; .FirstSector DB 0
.FirstTrack DB 0 ; .FirstTrack DB 0
*/
STRUCT CAT_Elements STRUCT CAT_Elements
Name block 8 Name BLOCK 8
Type BYTE Type BYTE
Start WORD Start WORD
Length WORD Length WORD
@ -95,215 +92,210 @@ FileBlock CAT_Elements
; 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,(Load_IMAGE_File.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 hl,SCL_Buffer LD DE,#C000 ; RAM-drive's track 0
ld b,(hl) ; CAT_Elements LD IX,SYS_SECTOR
inc hl LD (ix+SEEK.AllFilesNum),B
ld de,#C000 ; RAM-drive's track 0 .cat_loop: PUSH BC
ld ix,SYS_SECTOR LD A,(HL)
ld (ix+SEEK.AllFilesNum),b
.cat_loop:
push bc
ld a,(hl)
CP 1 CP 1
jr nz,1F ; this file is not deleted JR NZ,1F ; this file is not deleted
inc (ix+SEEK.DelFilesNum) INC (ix+SEEK.DelFilesNum)
1: ld bc,CAT_Elements-2 ; ld bc,#0D 1: LD BC,CAT_Elements-2 ; ld bc,#0D
ldir ; copy 14 bites of scl files table to trd image catalog LDIR ; copy 14 bites of scl files table to trd image catalog
ld a,(SYS_SECTOR.FirstFreeSec) LD A,(SYS_SECTOR.FirstFreeSec)
ld (de),a LD (DE),A
ld c,a ;!---[v 1] LD C,A ;!---[v 1]
inc de INC DE
ld a,(SYS_SECTOR.FirstFreeTrk) LD A,(SYS_SECTOR.FirstFreeTrk)
ld (de),a LD (DE),A
inc de ; Pointer on next filename in RAM drive INC DE ; Pointer on next filename in RAM drive
dec hl ; set to number of sectors DEC HL ; set to number of sectors
ld a,(hl) ; get file length in sectors from scl-table LD A,(HL) ; get file length in sectors from scl-table
and #0F AND #0F
add a,c ;!---[^ 1] ADD A,C ;!---[^ 1]
ld c,a ;!---[v 2] LD C,A ;!---[v 2]
and #0F AND #0F
ld (SYS_SECTOR.FirstFreeSec),a LD (SYS_SECTOR.FirstFreeSec),A
ld a,#F0 LD A,#F0
and c ;!---[^ 2] AND C ;!---[^ 2]
jr z,1F JR Z,1F
inc (ix+SEEK.FirstFreeTrk) INC (ix+SEEK.FirstFreeTrk)
1: ld a,(hl) 1: LD A,(HL)
srl a SRL A
srl a SRL A
srl a SRL A
srl a SRL A
add a,(ix+SEEK.FirstFreeTrk) ADD A,(ix+SEEK.FirstFreeTrk)
ld (SYS_SECTOR.FirstFreeTrk),a LD (SYS_SECTOR.FirstFreeTrk),A
inc hl ; Pointer on next filename in SCL_Buffer INC HL ; Pointer on next filename in SCL_Buffer
pop bc POP BC
djnz .cat_loop DJNZ .cat_loop
xor a XOR A
ld (de),a ; file table end marker 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
@ -314,8 +306,8 @@ Convert_SCLtoTRD:
RST ToDSS RST ToDSS
DI DI
LD A,(MEM_BLK) LD A,(Load_IMAGE_File.MEM_BLK)
jp Load_IMAGE_File.scl_read_next JP Load_IMAGE_File.scl_read_next
;-----------[] ;-----------[]
@ -328,9 +320,6 @@ 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<#A000,"Buffer out of mem bank 2"

View File

@ -4,5 +4,11 @@
sj.insert_define("BUILD_DATE", "'" .. date .. "." .. month .. "." .. year .. "'") sj.insert_define("BUILD_DATE", "'" .. date .. "." .. month .. "." .. year .. "'")
ENDLUA 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
; ;