From d07085bb0a7f9583ffc103541394caa45bddbcad Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 3 Oct 2024 00:09:21 +1000 Subject: [PATCH] before free zx pages --- For_4x.asm | 4 +- Shared_Includes | 2 +- ZXMODE/ZXMODE.FRT | 177 ++++++++++++++++++++++++++++++++++++++++++++++ ZXMODE/_HELP.FRT | 19 +++++ spectrum.asm | 26 ++++--- 5 files changed, 212 insertions(+), 16 deletions(-) create mode 100644 ZXMODE/ZXMODE.FRT create mode 100755 ZXMODE/_HELP.FRT diff --git a/For_4x.asm b/For_4x.asm index a4fd653..8c163d5 100644 --- a/For_4x.asm +++ b/For_4x.asm @@ -1,3 +1,5 @@ +;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; + INCLUDE 'Shared_Includes/structures/FileSystem.inc' ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-; ; in: HL - CLUSTER @@ -56,7 +58,7 @@ SET_IMAGE_DIR_SECTOR: RST ToDSS RET C ; - LD HL,(TMP_BUFF+26) ; ;!HARDCODE first dir cluster + 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 diff --git a/Shared_Includes b/Shared_Includes index e73e9f8..817bba0 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1 +Subproject commit 817bba0c1abebdb890f77ee129578ebe06fb5131 diff --git a/ZXMODE/ZXMODE.FRT b/ZXMODE/ZXMODE.FRT new file mode 100644 index 0000000..ce69977 --- /dev/null +++ b/ZXMODE/ZXMODE.FRT @@ -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 " 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 " 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 " 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 " 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 " 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 " 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 ( ) +\ 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 ( 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 + diff --git a/ZXMODE/_HELP.FRT b/ZXMODE/_HELP.FRT new file mode 100755 index 0000000..95cf5a0 --- /dev/null +++ b/ZXMODE/_HELP.FRT @@ -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 + diff --git a/spectrum.asm b/spectrum.asm index 81e405b..4bcfd4e 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -527,22 +527,19 @@ FILE_HANDLE: DB 0 ; !FIXIT ;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°; -RESTORE_PORT_HOLD: - ;!FIXIT ᤥ« âì ç¥à¥§ API BIOS +FIRST_PREPARE: LD A,CNF_PORT.CNF_0 + OUT (SYS_PORT.RAM),A + ; restore HOLD port LD D,CMOS_CELL.ScreenPosition LD C,BIOS.CMOS_RD RST ToBIOS - RET C + JR C,.next LD B,A LD A,ACEX.HOLD LD C,BIOS.SET_PORTS - JP ToBIOS -; ; ; -FIRST_PREPARE: LD A,CNF_PORT.CNF_0 - OUT (SYS_PORT.RAM),A - CALL RESTORE_PORT_HOLD - - LD A,high ZXKeys.Line_7 + RST ToBIOS + ; +.next: LD A,high ZXKeys.Line_7 IN A,(ZXKeys) AND #1F CP #1E @@ -747,8 +744,9 @@ RESET_TO_ZX: DI .DIR_SEC_H+1: LD HL,0 LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL .CURRENT_DIR_DRIVE+1: - LD A,#FF + LD A,#FF LD (SYS_PAGE.CURRENT_DIR_DRIVE),A + LD (SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A ;;;;;;;; LD A,CNF_PORT.CNF_3 @@ -836,12 +834,12 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion ; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ;!FIXIT ç¥à¥§ äã­ªæ¨î ¡¨®á ¯®¯à®¡®¢ âì DI - LD A,5 + LD A,5 ; [ ] free zx pages! OUT (SLOT1),A ; #1FFD LD BC,#1FFD XOR A - OUT (SLOT0),A + OUT (SLOT0),A ; [ ] free zx pages! OUT (C),A ; #7FFD LD B,#7F @@ -917,7 +915,7 @@ LOOP_P2: OUT (C),A PROG_STARTS: .Launch: EQU #FF00 DISP .Launch - LD A,2 + LD A,2 ; [ ] free zx pages! OUT (SLOT2),A LD A,E OUT (SYS_PORT.RAM),A