+load custom pallete

This commit is contained in:
Anatoliy Belyanskiy 2023-09-11 04:48:00 +10:00
parent af64d9cff3
commit 23097bdd16
2 changed files with 120 additions and 33 deletions

@ -1 +1 @@
Subproject commit 6c92964be4fbbbec546d52ad6e2b51fd596d8a02 Subproject commit 947627f58f37509150f653c81c82d742a4123cb6

View File

@ -47,6 +47,8 @@
IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF IFNDEF DEBUG : DEFINE DEBUG 0 : ENDIF
IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF IFNDEF EMULATOR 0 : DEFINE EMULATOR 0 : ENDIF
DEFINE EXE_HEADER 1 DEFINE EXE_HEADER 1
DEFINE NEW_MEMORY_LOGIC 0
; define NEED_LOADER 1 ; define NEED_LOADER 1
; define NeedSafePort_Y 0 ; define NeedSafePort_Y 0
;*************************************** ;***************************************
@ -91,17 +93,32 @@ program_start EQU BEGIN
;*************************************** ;***************************************
FULL_FILE_NAME_LENGTH EQU 128 ; ¤«¨­  áâப¨ ¯ã⨠ª ä ©«ã FULL_FILE_NAME_LENGTH EQU 128 ; ¤«¨­  áâப¨ ¯ã⨠ª ä ©«ã
MAX_LINE_LENGTH EQU 120 ; ¤«¨­  áâப¨ CFG ä ©«  MAX_LINE_LENGTH EQU 120 ; ¤«¨­  áâப¨ CFG ä ©« 
CFG_FILE_LINES EQU 8
NAME_CFG_LINE EQU 0
BASIC128_LINE EQU 2
BASIC_48_LINE EQU 4
TRDOS_LINE EQU 6
EXP_LINE EQU 8
BIOS_LINE EQU 10
BIOS2_LINE EQU 12
;XXX_LINE EQU ??
OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
;!TEST
;CFG_FILE_LINES EQU 8
CFG_FILE_LINES EQU 9
;
; NAME_CFG_LINE EQU 0
; BASIC128_LINE EQU 2
; BASIC_48_LINE EQU 4
; TRDOS_LINE EQU 6
; EXP_LINE EQU 8
; BIOS_LINE EQU 10
; BIOS2_LINE EQU 12
;XXX_LINE EQU ??
NAME_CFG_LINE EQU 1
BASIC128_LINE EQU 2
BASIC_48_LINE EQU 3
TRDOS_LINE EQU 4
EXP_LINE EQU 5
BIOS_LINE EQU 6
BIOS2_LINE EQU 7
OPTIONS_LINE EQU 8
PALETTE_LINE EQU 9
;OPTIONS_LINE EQU (CFG_FILE_LINES-1)*2
;*************************************** ;***************************************
; ;
@ -141,23 +158,28 @@ BEGIN: LD (LINE_X),IX
RST ToBIOS RST ToBIOS
; ;
ELSE ELSE
;
ENDIF ENDIF
JP COMAND_LINE JP COMAND_LINE
Error_NoMemForSPpages: Error_NoMemForSPpages:
LD HL,NO_MEM_MSG2 LD HL,NO_MEM_MSG2
JR ERROR_FILE.prn_msg JR ERROR_FILE.prn_msg
ERROR_FILE: ERROR_FILE: LD HL,ERROR_FILE_MSG_X
LD HL,ERROR_FILE_MSG_X
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
;
LD A,(FILE_HANDLE)
LD C,Dss.Close
RST ToDSS
;
LD HL,ONE_FILE LD HL,ONE_FILE
.prn_msg: LD C,Dss.PChars .prn_msg: LD C,Dss.PChars
RST ToDSS RST ToDSS
;
LD HL,ERROR_FILE_MSG LD HL,ERROR_FILE_MSG
JP EXIT_ALL JP EXIT_ALL
@ -379,8 +401,9 @@ N_LINE: LD (HL),0
;!TODO ¥á«¨ ¯à®¯ã᪠¥¬ § £à㧪ã ROM ¤«ï 48, 128 ¨«¨ trdos, â® ¢áâ ¢«ïâì ¢ ¯®àâ vROM ­®¬¥à ¨§ áâ ­¤ àâ­®£® ¯¥à¢®£® ¡«®ª  ;!TODO ¥á«¨ ¯à®¯ã᪠¥¬ § £à㧪ã ROM ¤«ï 48, 128 ¨«¨ trdos, â® ¢áâ ¢«ïâì ¢ ¯®àâ vROM ­®¬¥à ¨§ áâ ­¤ àâ­®£® ¯¥à¢®£® ¡«®ª 
;!TEST ;!TEST
MACRO vROM_LOAD romLine;,pageNumber MACRO vROM_LOAD romLine;,pageNumber
.romLine = (romLine-1)*2
EX DE,HL EX DE,HL
LD HL,(A_LINES+romLine) LD HL,(A_LINES+.romLine)
LD A,(HL) LD A,(HL)
CP ';' CP ';'
EX DE,HL EX DE,HL
@ -420,6 +443,44 @@ N_LINE: LD (HL),0
;vROM_LOAD _LINE ;, #42 ; 10-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE ;, #42 ; 10-ï áâப  - ¨¬ï ä ©« 
;vROM_LOAD _LINE ;, #42 ; 11-ï áâப  - ¨¬ï ä ©«  ;vROM_LOAD _LINE ;, #42 ; 11-ï áâப  - ¨¬ï ä ©« 
;!TEST palette load
LOADING_PALETTE:
EX DE,HL
LD HL,( A_LINES + ((PALETTE_LINE-1)*2) )
LD A,(HL)
CP ';'
JR Z,.skip
LD DE,ONE_FILE
LD BC,FULL_FILE_NAME_LENGTH
LDIR
LD HL,ONE_FILE
LD A,Dss.Open.R
LD C,Dss.Open
RST ToDSS
JP C,ERROR_FILE ; ®è¨¡ª , ¥á«¨ ­¥â ä ©« 
LD (FILE_HANDLE),A
LD HL,PlaceForPalette
LD DE,1024*4
LD C,Dss.Read
RST ToDSS
JP C,ERROR_FILE ; ®è¨¡ª  ¯à¨ ç⥭¨¨
;!TEST ¯à®â¥áâ¨âì DSS ­  í⮬. …᫨ ä ©« 4096 ¨ ç¨â âì 4096, â® ¢ A ¡ã¤¥â #FF
;OR A
;JP NZ,ERROR_FILE
;
;PUSH DE
LD A,(FILE_HANDLE)
LD C,Dss.Close
RST ToDSS
;POP DE
.skip:
;
; ä ©«ë áç¨â ­ë ; ä ©«ë áç¨â ­ë
;************************************* ;*************************************
@ -427,7 +488,7 @@ N_LINE: LD (HL),0
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
LD HL,(A_LINES+NAME_CFG_LINE) LD HL,(A_LINES + (NAME_CFG_LINE-1)*2 )
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
@ -442,7 +503,7 @@ N_LINE: LD (HL),0
LD A,Spec_Page LD A,Spec_Page
OUT (SLOT3),A OUT (SLOT3),A
LD HL,(A_LINES+OPTIONS_LINE) ; áâப  ¯ à ¬¥â஢ LD HL,(A_LINES + (OPTIONS_LINE-1)*2 ) ; áâப  ¯ à ¬¥â஢
LOOP_PAR1: LD A,(HL) LOOP_PAR1: LD A,(HL)
CP "/" CP "/"
JR Z,PARAM_TEST JR Z,PARAM_TEST
@ -514,7 +575,7 @@ BUFFER_RAM_PAGES:
ELSE ELSE
BUFFER_RAM_PAGES: BUFFER_RAM_PAGES:
.ROM: DB #42, #43, #44, #45, #46, #47 .ROM: DB #42, #43, #44, #45, #46, #47
.RAM: BLOCK 16 ; 256 ª¡ ;.RAM: BLOCK 16 ; 256 ª¡
.Size EQU $-BUFFER_RAM_PAGES .Size EQU $-BUFFER_RAM_PAGES
.end_marker: BYTE #FF .end_marker: BYTE #FF
ENDIF ENDIF
@ -928,10 +989,32 @@ ORIG1: LD BC,Port_All_Mode
;--------------------------------------- ;---------------------------------------
;****************************** ;******************************
LD A,(LD_Pal_+2)
INC A
JR NZ,SetDefaultPalette
;
LD HL,PlaceForPalette + 0
LD A,4
CALL SET_PAL
;
LD HL,PlaceForPalette + 1024
LD A,5
CALL SET_PAL
;
LD HL,PlaceForPalette + 2048
LD A,6
CALL SET_PAL
;
LD HL,PlaceForPalette + 3072
LD A,7
CALL SET_PAL
JR SetDefaultPalette.skip
SetDefaultPalette:
XOR A XOR A
LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette LD BC,2*256+BIOS.SET_PAL_INIT ; Set ZX-Palette
RST ToBIOS_18 RST ToBIOS_18
.skip:
LD A,(Int_or_+2) LD A,(Int_or_+2)
AND A ; 3 AND A ; 3
JR NZ,Original JR NZ,Original
@ -971,20 +1054,13 @@ Original: LD C,BIOS.FN_SYNC ; -> INT for Pentagon or Scorpion
OUT (C),A ; #1FFD OUT (C),A ; #1FFD
LD B,#7F LD B,#7F
;!TEST
LD A,8 LD A,8
LOOP_P1: DEC A LOOP_P1: DEC A
OUT (C),A ; #7FFD OUT (C),A ; #7FFD
OUT (SLOT3),A OUT (SLOT3),A
JR NZ,LOOP_P1 JR NZ,LOOP_P1
;OUT (C),A ; #7FFD
;OUT (SLOT3),A
;INC A
;CP 8
;JR NZ,LOOP_P1
;
LD B,#1F LD B,#1F
LD A,#10 LD A,#10
OUT (C),A ; #1FFD OUT (C),A ; #1FFD
@ -1065,7 +1141,13 @@ PROG_STARTS: LD A,2
.Length EQU $-PROG_STARTS .Length EQU $-PROG_STARTS
ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!' ASSERT PROG_STARTS.Length<#100,'PROG_STARTS too big!!!'
; ;
SET_PAL: LD DE,0
LD BC,#FF*256 + BIOS.PIC_SET_PAL
JP ToBIOS_18
;
; ;
; …᫨ ¯ à ¬¥âà § ¤ ­, â® ¢ë¡¨à ¥âáï §­ ç¥­¨¥ Y ; …᫨ ¯ à ¬¥âà § ¤ ­, â® ¢ë¡¨à ¥âáï §­ ç¥­¨¥ Y
PARAMS:; Y / N ; âãâ §­ ç¥­¨ï ¤«ï ª«î祩 § ¯¨á뢠îâáï ª ª 16 ¡¨â §­ ç¥­¨¥, §­ ç¨â ®¡à â­ë© ¯®à冷ª ¡ ©â®¢ PARAMS:; Y / N ; âãâ §­ ç¥­¨ï ¤«ï ª«î祩 § ¯¨á뢠îâáï ª ª 16 ¡¨â §­ ç¥­¨¥, §­ ç¨â ®¡à â­ë© ¯®à冷ª ¡ ©â®¢
@ -1081,6 +1163,7 @@ No_run_: DW no_run, #00FF ;
Int_or_: DW Int_or, #0300 ; ¢ª«îç¨âì INT "Original" Int_or_: DW Int_or, #0300 ; ¢ª«îç¨âì INT "Original"
Ret_zx_: DW Ret_zx, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ ZX áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_fn_ Ret_zx_: DW Ret_zx, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ ZX áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_fn_
Ret_fn_: DW Ret_fn, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ FN áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_zx_ Ret_fn_: DW Ret_fn, #4100 ; ¢ª«îç¨âì ¢®§¢à â ¢ FN áâà ­¨æ  (#41) ¤®«¦­  ᮢ¯ ¤ âì á ret_zx_
LD_Pal_: DW LD_Pal, #FF00
DW 0,0 ; end marker DW 0,0 ; end marker
Turbo_: DB "turbo", 255,0 Turbo_: DB "turbo", 255,0
@ -1095,6 +1178,7 @@ no_run: DB "no-run", 255,0
Int_or: DB "origin", 255,0 Int_or: DB "origin", 255,0
Ret_zx: DB "ret-zx", 255,0 Ret_zx: DB "ret-zx", 255,0
Ret_fn: DB "ret-fn", 255,0 Ret_fn: DB "ret-fn", 255,0
LD_Pal: DB "load-pal", 255,0
;ZX_PROG_LEN EQU $-RELOAD_PROG ;ZX_PROG_LEN EQU $-RELOAD_PROG
@ -1114,6 +1198,9 @@ Loader_length EQU 0
ENDIF ENDIF
;----------------------------------------------[End Loader section] ;----------------------------------------------[End Loader section]
; ;
PlaceForPalette EQU #9000
STACK_CHECK_MACRO stack_point,stack_buffer STACK_CHECK_MACRO stack_point,stack_buffer
; Code after Loader ; Code after Loader
;[]-----------------------------[PLUGINS]-----------------------------[] ;[]-----------------------------[PLUGINS]-----------------------------[]