mirror of
https://github.com/Tolik-Trek/Crazy-Blaster.git
synced 2026-06-15 09:31:37 +03:00
2360 lines
47 KiB
NASM
2360 lines
47 KiB
NASM
; ÛÛÛÛÛÛÛ»ÛÛ» ÛÛÛÛÛ» ÛÛÛÛÛÛÛ»ÛÛ» ÛÛ»ÛÛÛÛÛÛÛ»ÛÛÛÛÛÛ»
|
||
; ÛÛÉÍÍÍͼÛÛº ÛÛÉÍÍÛÛ»ÛÛÉÍÍÍͼÛÛº ÛÛºÛÛÉÍÍÍͼÛÛÉÍÍÛÛ»
|
||
; ÛÛÛÛÛ» ÛÛº ÛÛÛÛÛÛÛºÛÛÛÛÛÛÛ»ÛÛÛÛÛÛÛºÛÛÛÛÛ» ÛÛÛÛÛÛɼ
|
||
; ÛÛÉÍͼ ÛÛº ÛÛÉÍÍÛÛºÈÍÍÍÍÛÛºÛÛÉÍÍÛÛºÛÛÉÍͼ ÛÛÉÍÍÛÛ»
|
||
; ÛÛº ÛÛÛÛÛÛÛ»ÛÛº ÛÛºÛÛÛÛÛÛÛºÛÛº ÛÛºÛÛÛÛÛÛÛ»ÛÛº ÛÛº
|
||
; Èͼ ÈÍÍÍÍÍͼÈͼ ÈͼÈÍÍÍÍÍͼÈͼ ÈͼÈÍÍÍÍÍͼÈͼ Èͼ
|
||
|
||
; [x] - ¢ë室 ¢ DSS, ¥á«¨ 稯 ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||
; [x] - 㨢¥àá «ìë© EXE ¤«ï K30 ¨ K50
|
||
; [x] - ¯à®¢¥àª ª®â஫쮩 áã¬¬ë ¤«ï BIOS ¨ ¡¨âáâਬ®¢ ®â¤¥«ì®
|
||
; [x] - ¯à®¢¥àª ¥á®¢¬¥á⨬®áâì áâ ண® ¡¨âáâਬ á ®¢ë¬ BIOS ¯à¨ ¯à®è¨¢ª¥ ¯® ®¯æ¨¨ "R"
|
||
; [x] - ¯à ¢¨«ì®¥ á®åà ¥¨¥ ¯®«®£® ID ¬ â¥à¨áª®© ¯« âë
|
||
; [x] - ¯à ¢¨«ì ï ¢¥àá¨ï ¡¨âáâਬ ¢ á«ãç ¥ ®¡®¢«¥¨ï ⮫쪮 BIOS
|
||
|
||
|
||
;
|
||
;---------[Compiling parameters]--------;
|
||
DEFINE _dIs_Updater 1 ; ᮡ¨à âì ®â¤¥«ìë© ¯à®è¨¢ «ì騪 ¨«¨ ¯¤¥©â¥à ¢¬¥áâ¥ á ®¡à §®¬ <20>‡“
|
||
DEFINE _dLogingMode 0 ;
|
||
DEFINE _dDEBUG 0 ; ª®¬¯¨«ïæ¨ï ¤«ï ¤¥¡ £
|
||
DEFINE NeedSafePort_Y 0 ;
|
||
DEFINE _dEMULATOR 1 ; 0 - hardware, 1 - "MAME", 2 - "ZXMAK"
|
||
;---------------------------------------;
|
||
; For _dLogingMode 1
|
||
MACRO SHOW_STEP colors
|
||
IF _dLogingMode
|
||
PUSH HL
|
||
PUSH AF
|
||
LD HL,colors
|
||
CALL BORDER_FLASH
|
||
POP AF
|
||
POP HL
|
||
ENDIF
|
||
ENDM
|
||
; For _dLogingMode 1
|
||
; Debug_Steps:
|
||
; ._1 EQU COLORS.CGA.BORDER.BLACK*256 + COLORS.CGA.BORDER.BLUE
|
||
; ._2 EQU COLORS.CGA.BORDER.BLACK*256 + COLORS.CGA.BORDER.GREEN
|
||
; ._3 EQU COLORS.CGA.BORDER.BLACK*256 + COLORS.CGA.BORDER.CYAN
|
||
; ._4 EQU COLORS.CGA.BORDER.BLUE*256 + COLORS.CGA.BORDER.GREEN
|
||
; ._5 EQU COLORS.CGA.BORDER.BLUE*256 + COLORS.CGA.BORDER.CYAN
|
||
; ._6 EQU COLORS.CGA.BORDER.GREEN*256 + COLORS.CGA.BORDER.CYAN
|
||
|
||
;=======================================
|
||
; IF _dDEBUG
|
||
; DEVICE SPRINTER
|
||
; ENDIF
|
||
;=======================================
|
||
|
||
;------------[LUA functions]------------;
|
||
INCLUDELUA 'Shared_Includes/LUA/Functions.LUA'
|
||
;---------------------------------------;
|
||
|
||
;---------[BIOS and BITSTREAMS]---------;
|
||
DEFINE BIOS_K30_FILE '../SP_Core/Build/_SPRIN.BIN'
|
||
DEFINE BIOS_K30_FILE.BIOSlength 196608 ; !TODO ¬®¦® 楯«ïâì ¤«¨ã ¨§ ¡¨®á®¢áª®£® BUILD.ASM
|
||
DEFINE BIOS_K30_FILE.K30_OFFSET 196609 ;
|
||
|
||
DEFINE K50_FILE '../SP_Core/Build/Bin/LOADER_K50.BIN'
|
||
DEFINE K50_FILE.Length 0 ; ¥á«¨ á⮨⠮«ì, â® ¯®¤áâ ¢«ï¥âáï à §¬¥à ä ©« . ®¡ëç® 65536 ¡ ©â
|
||
DEFINE LOADER.Length 256 ; !TODO ¯à¨¢ï§ âìáï ¯®â®¬ ª ¤«¨¥ «® ¤¥à ¢ ¨á室¨ª å ¡¨®á
|
||
|
||
LUA PASS1
|
||
-- ‚ëç¨á«ï¥¬ ª®â஫ìë¥ á㬬ë ä ©«®¢
|
||
checksum_k30 = Get_checksum(sj.get_define("BIOS_K30_FILE"), sj.get_define("BIOS_K30_FILE.K30_OFFSET"), 0)
|
||
checksum_bios = Get_checksum(sj.get_define("BIOS_K30_FILE"), 0, sj.get_define("BIOS_K30_FILE.BIOSlength"))
|
||
checksum_k50 = Get_checksum(sj.get_define("K50_FILE"), 0, sj.get_define("K50_FILE.Length"))
|
||
checksum_loader = Get_checksum(sj.get_define("K50_FILE"), 0, sj.get_define("LOADER.Length"))
|
||
ENDLUA
|
||
LUA ALLPASS
|
||
sj.insert_define("LUA_CHECKSUM_K30", checksum_k30)
|
||
sj.insert_define("LUA_CHECKSUM_BIOS", checksum_bios)
|
||
sj.insert_define("LUA_CHECKSUM_K50", checksum_k50)
|
||
sj.insert_define("LUA_CHECKSUM_LOADER", checksum_loader)
|
||
ENDLUA
|
||
;---------------------------------------;
|
||
|
||
;------------[Picture setup]------------;
|
||
; INCLUDE 'Pictures/Flash.inc' ; <---- ’ãâ ¢ë¡¨à ¥âáï ä ©« ª à⨪¨ ¨ ¥ñ ®¯¨á ⥫¨
|
||
INCLUDE 'Pictures/NEW_3_06.inc' ; <---- ’ãâ ¢ë¡¨à ¥âáï ä ©« ª à⨪¨ ¨ ¥ñ ®¯¨á ⥫¨
|
||
; INCLUDE 'Pictures/good.inc' ; <---- ’ãâ ¢ë¡¨à ¥âáï ä ©« ª à⨪¨ ¨ ¥ñ ®¯¨á ⥫¨
|
||
|
||
/*
|
||
LUA PASS1
|
||
-- <EFBFBD>஢¥à塞 BMP ¨ ¤®áâ ñ¬ ¨§ ¥£® ¯ à ¬¥âàë
|
||
bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (sj.get_define("PICTURE_FILE"))
|
||
ENDLUA
|
||
LUA ALLPASS
|
||
sj.insert_define("LUA_BMP_WIDTH", bmp_width)
|
||
sj.insert_define("LUA_BMP_HEIGHT", bmp_height)
|
||
sj.insert_define("LUA_BMP_IMAGE_SIZE", bmp_image_size)
|
||
sj.insert_define("LUA_BMP_IMAGE_OFFSET", bmp_image_offset)
|
||
ENDLUA
|
||
*/
|
||
|
||
Screen_Offset EQU #0000 ; ᬥ饨¥ ¢ ¢¨¤¥®¯ ¬ï⨠¤«ï ¤ ëå (0/1 íªà , ¯à¨¬¥à)
|
||
|
||
INCLUDE 'Shared_Includes/structures/bmp.inc'
|
||
;---------------------------------------;
|
||
INCLUDE 'Shared_includes/constants/SP2000.inc'
|
||
INCLUDE 'Shared_includes/constants/dss_equ.inc'
|
||
|
||
org_addr EQU SLOT2.MEM_ADDR+CLP_Buffer
|
||
stack_size EQU #80
|
||
code_addr EQU Flasher_Start
|
||
program_start EQU Flasher_Start
|
||
|
||
|
||
MODULE expBIOS_Vars
|
||
INCLUDE 'constants/BIOS_EXP.INC'
|
||
ENDMODULE
|
||
|
||
INCLUDE 'Versions.inc'
|
||
INCLUDE 'constants/ROM_CHIPS.inc'
|
||
INCLUDE 'Shared_includes/constants/standart_colors.inc'
|
||
INCLUDE 'Shared_includes/constants/BIOS_equ.inc'
|
||
INCLUDE 'Shared_includes/macroses/macros.z80'
|
||
INCLUDE 'Shared_includes/macroses/accelerator.z80'
|
||
|
||
|
||
|
||
BoardNumOffsets: ; ‘¬¥é¥¨ï ¢ EXP.asm ¯® ª®â®àë¬ åà ïâáï ¤ ë¥ Board Number
|
||
.Number EQU expBIOS_Vars.BOARD_INFO.number
|
||
.Type EQU expBIOS_Vars.BOARD_INFO.type
|
||
.Start EQU expBIOS_Vars.BoardID.start
|
||
.End EQU expBIOS_Vars.BoardID.end
|
||
|
||
; !FIXIT ; !HARDCODE
|
||
ROM_BITSTREAM:
|
||
.ROM EQU #1 ; ¯®«®¢¨ª <20>‡“ ¤«ï sys_port_on £¤¥ ᨤ¨â ¡¨âáâਬ
|
||
.PAGE EQU #0C ; áâà ¨æ ¢ ¯®«®¢¨ª¥ <20>‡“ ¤«ï sys_port_on £¤¥ ç¨ ¥âáï ¡¨âáâਬ
|
||
.OFFSET EQU #100 ; ᬥ饨¥ ¢ áâà ¨æ¥ ¯® ª®â®à®¬ã ç¨ ¥âáï ¡¨âáâਬ
|
||
.CHIP EQU #4 ; ᬥ饨¥ ¢ ¡¨âáâਬ¥ ¯® ª®â®à®¬ã ¡ ©â 稯 «¥¦¨â
|
||
.K30 EQU #39 ; <20> ©â ª30
|
||
.K50 EQU #3C ; <20> ©â ª50
|
||
|
||
|
||
;
|
||
;[] ============================================== []
|
||
INCLUDE 'Shared_includes/constants/EXE_Header.z80'
|
||
;[] ============================================== []
|
||
ORG org_addr
|
||
;
|
||
|
||
|
||
; IF _dDEBUG
|
||
; OUTPUT "Build/Debug.bin"
|
||
; ENDIF
|
||
|
||
Flasher_Start:
|
||
; IF _dIs_Updater
|
||
IN A,(SLOT0)
|
||
LD (SET_ROM_MODE.Normal.slot0),A
|
||
LD A,(IX-3)
|
||
LD (FILE_HANDLE),A
|
||
LD A,I
|
||
LD (SET_ROM_MODE.Normal.int_vector),A
|
||
|
||
LD C,Dss.Cursor
|
||
RST ToDSS
|
||
LD (cursor_restore),DE
|
||
|
||
; TEST CHIP
|
||
CALL SET_ROM_MODE.Flash
|
||
LD (SAVE_DCP_PORT),HL
|
||
;
|
||
CALL TEST_ROM_CHIP
|
||
LD (TST_R.jp),BC
|
||
PUSH AF
|
||
CALL SET_ROM_MODE.Normal
|
||
POP AF
|
||
JP C,ITs_Unknown_Chip
|
||
LD C,Dss.GetVMod
|
||
RST ToDSS
|
||
JR C,1F ; ¥á«¨ ®è¨¡ª , â® ®áâ ¢«ï¥¬ ¤¥ä®«âë¥ § 票ï ०¨¬ ¨ ®¬¥à íªà
|
||
|
||
LD (vid_mod_save),A
|
||
LD A,B
|
||
LD (scr_num_save),A
|
||
|
||
1: LD IX,VideoModes.graf_mode320x256
|
||
LD E,%00010001
|
||
LD C,BIOS.WIN_OPEN
|
||
RST ToBIOS
|
||
JP C,Program_exit.video_mode
|
||
|
||
LD IX,VideoModes.text_mode80x32
|
||
LD E,%00000001
|
||
LD C,BIOS.WIN_OPEN
|
||
RST ToBIOS
|
||
JP C,Program_exit.video_mode
|
||
|
||
LD DE,0
|
||
LD HL,#2050
|
||
LD B,7
|
||
LD A,32
|
||
LD C,Dss.Clear
|
||
RST ToDSS
|
||
|
||
LD HL,START_MSG
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
CALL START_PIC
|
||
|
||
; ¤®áâ ñ¬ ®¬¥à ¢¥àᨨ ¡¨®á ¯®«ì§®¢ â¥«ï ¨ ¯à®¢¥à塞 ¬®¦® «¨ ¥£®
|
||
; ®¡®¢«ïâì ®â¤¥«ì® ®â ¡¨âáâਬ
|
||
LD HL,0 ; ¡ãä¥à ¤«ï áâப¨ ID ¡¨®á ¯¨å ¥¬ ¢ <20>‡“, ¯®â®¬ã çâ® ¥ ã¦
|
||
LD C,BIOS.FN_VERSION
|
||
RST ToBIOS
|
||
JR C,.too_old_bios
|
||
;
|
||
LD HL,-#0305 ; ¯à®¢¥àª ¡¨®á ¢ëè¥ 3.04
|
||
ADD HL,DE
|
||
JR NC,.not_305
|
||
; ¥á«¨ ¢¥àá¨ï ¡¨®á > 3.04, â® ®¬¥à ¡¨âáâਬ ¯®«ãç ¥¬ ¨ ç¥
|
||
PUSH DE ; á«ãç © ®è¨¡ª¨
|
||
LD HL,0 ; ¡ãä¥à ¤«ï áâப¨ ¢ <20>‡“ - ¥ 㦥
|
||
LD BC,BIOS.FN_CRIPT.AcexAndBitstream
|
||
RST ToBIOS
|
||
JR NC,.is_new_bios
|
||
POP DE
|
||
JR .not_305
|
||
.is_old_bios: ;
|
||
.is_new_bios: LD HL,-5 ; â ª®© १ã«ìâ â (4) ¡ã¤¥â áâ ன â¥á⮢®© 3.05 ¢ äãªæ¨¨ FN_CRIPT ¤® ¤®¡ ¢«¥¨ï ¢ ¥ñ ¢¥àᨨ bitstream
|
||
ADD HL,DE
|
||
POP HL
|
||
JR C,.is_super_new_bios
|
||
EX DE,HL
|
||
.is_super_new_bios:;
|
||
.not_305: LD (SAVE_BITSTREAM.romCNFversion),DE
|
||
LD HL,MinBiosVerForUserBitstream
|
||
XOR A
|
||
SBC HL,DE
|
||
LD HL,START_MSG.afterPICyes_R
|
||
JR C,.print_next_msg
|
||
|
||
.too_old_bios: LD HL,0
|
||
LD (.skip_r_key),HL ; mem patch - NOP : NOP ¢¬¥áâ® CP 'r'
|
||
LD HL,START_MSG.afterPICno_R
|
||
|
||
.print_next_msg:
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD C,Dss.Cursor
|
||
RST ToDSS
|
||
PUSH DE
|
||
LD (cursor_restore),DE
|
||
|
||
.loop: LD C,Dss.WaitKey
|
||
RST ToDSS
|
||
OR #20
|
||
CP 'y'
|
||
JR Z,.next
|
||
|
||
.skip_r_key: CP 'r'
|
||
JR Z,.flash_only_bios
|
||
|
||
CP 'p'
|
||
JP NZ,Program_exit.no_errors
|
||
|
||
LD A,(REWRITE.pause)
|
||
XOR 1
|
||
LD (REWRITE.pause),A
|
||
|
||
LD HL,START_MSG.PauseTXT
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD A,(REWRITE.pause)
|
||
OR A
|
||
LD HL,START_MSG.PauseON
|
||
JR NZ,.showPauseMSG
|
||
LD HL,START_MSG.PauseOFF
|
||
|
||
.showPauseMSG: LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
LD DE,(cursor_restore)
|
||
LD C,Dss.Locate
|
||
RST ToDSS
|
||
JR .loop
|
||
;.exit: call Program_exit.no_errors
|
||
|
||
.flash_only_bios:
|
||
LD A,#FF
|
||
LD (ONLY_BIOS),A
|
||
|
||
; ELSE
|
||
; LD HL,BEGIN_MSG
|
||
; LD C,Dss.PChars
|
||
; RST ToDSS
|
||
; ENDIF
|
||
|
||
.next: XOR A
|
||
OUT (RGMOD),A
|
||
DI
|
||
|
||
|
||
;+++++++++++++++++++++++++++++++++++++++
|
||
; IFN dIs_Updater
|
||
; CALL READ_FROM_FILE
|
||
; ELSE
|
||
|
||
CALL BUILD_FIRMWARE
|
||
LD A,(FILE_HANDLE)
|
||
LD C,Dss.Close
|
||
RST ToDSS
|
||
;DI
|
||
; JP C,Program_exit.file
|
||
; ENDIF
|
||
;+++++++++++++++++++++++++++++++++++++++
|
||
DI
|
||
|
||
CALL NUMBER_COPY
|
||
CALL DrawProgress.done
|
||
|
||
REWRITE:
|
||
IN A,(SLOT1)
|
||
LD (SV_PG1),A
|
||
; !TODO ‘¤¥« âì á®®¡é¥¨¥ ®¡ ®è¨¡ª¥ ¨ ¯ëâ âìáï ¤ «ìè¥ ¯¥à¥§ ¯¨áë¢ âì
|
||
;LD A,(COUNT_ALL)
|
||
;INC A
|
||
;LD (COUNT_ALL),A
|
||
;CP 6 ; 5 ¯®¯ë⮪
|
||
;JR NZ,CONTINUE
|
||
;
|
||
;-----------[PAUSE for reROM]-----------;
|
||
.pause+1: LD A,0
|
||
AND A
|
||
JR Z,CONTINUE
|
||
|
||
LD A,COLORS.CGA.BORDER.GREEN
|
||
OUT (BorderColor),A
|
||
.loop:
|
||
IN A,(ZXKeys)
|
||
AND %00011111
|
||
XOR %00011111
|
||
JR Z,.loop
|
||
|
||
LD A,COLORS.CGA.BORDER.BLACK
|
||
OUT (BorderColor),A
|
||
;---------------------------------------;
|
||
JR CONTINUE
|
||
; !TODO ‘¤¥« âì á®®¡é¥¨¥ ®¡ ®è¨¡ª¥ ¨ ¯ëâ âìáï ¤ «ìè¥ ¯¥à¥§ ¯¨áë¢ âì
|
||
; DI
|
||
; HALT
|
||
;***********************************************************************
|
||
|
||
NUMBER_COPY: IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,#18 ;!HARDCODE
|
||
OUT (SLOT3),A
|
||
|
||
|
||
LD A,SYS_PORT.CNF_0
|
||
OUT (SYS_PORT.ROM),A ; ¢á直© á«ãç ©
|
||
|
||
LD BC,256+BIOS.FN_CRIPT
|
||
RST ToBIOS_18
|
||
JP C,Program_exit.no_BoardID
|
||
|
||
LD (#C000+BoardNumOffsets.Start),BC
|
||
LD (#C000+BoardNumOffsets.Number),HL
|
||
LD (#C000+BoardNumOffsets.End),DE
|
||
LD (#C000+BoardNumOffsets.Type),A
|
||
|
||
LD A,#10 ;!HARDCODE
|
||
OUT (SLOT3),A
|
||
LD A,(altera_chip)
|
||
LD (#C000+expBIOS_Vars.msgStrings.str_ACEX_MODEL),A
|
||
LD (#C000+expBIOS_Vars.msgRusStrings.str_ACEX_MODEL),A
|
||
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
|
||
RET
|
||
|
||
CONTINUE:
|
||
CALL SET_ROM_MODE.Flash
|
||
|
||
; di
|
||
; ld bc,#FFEE
|
||
; ld a,3 ; Z84.REG.Misc_Ctrl 3-rd register - boundaries
|
||
; out (c),a ; Z84.SYS.Control
|
||
; inc c
|
||
; ld a,1 ; cs0 enable, cs1 disable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two
|
||
; out (c),a ; Z84.SYS.Data
|
||
|
||
; dec c
|
||
; ld a,2 ; Z84.REG.CS_Boundary
|
||
; out (c),a ; Z84.SYS.Control
|
||
; inc c
|
||
; ld a,#F3 ; boundaries rom = 0000.3fff
|
||
; out (c),a ; Z84.SYS.Data
|
||
; ;-------------------------------
|
||
; LD BC,#1FFD
|
||
; XOR A
|
||
; OUT (C),A
|
||
|
||
; ld a,#FF
|
||
; out (SLOT0),a
|
||
; ld a,#FE
|
||
; ld i,a ; ã¡à âì «¨è¨¥ ®¡à 饨ï...
|
||
|
||
; ;-------------------------------
|
||
; ;!FIXIT remove
|
||
; LD BC,ACEX.ROM_RG*256 + ACEX.ROM_RG
|
||
; CALL SET_DCP_PORT
|
||
; LD (SAVE_DCP_PORT),HL
|
||
|
||
// in a,(SLOT1)
|
||
// push af
|
||
// ld a,DCP_PAGE
|
||
// out (SLOT1),a ; set dcp page
|
||
// LD A,(#4400)
|
||
// LD (SAVE_DCP_PORT.write),A
|
||
// LD A,(#4600)
|
||
// LD (SAVE_DCP_PORT.read),A
|
||
// ld a,ACEX.ROM_RG
|
||
// ld (#4400),a ; open for wr
|
||
// ld (#4600),a ; open for rd
|
||
// pop af
|
||
// out (SLOT1),a ; close SLOT1
|
||
|
||
LD A,COLORS.CGA.BORDER.BLACK
|
||
OUT (BorderColor),A
|
||
|
||
;LD A,SYS_PORT.CNF_0
|
||
;OUT (SYS_PORT.ON),A ; CNF0
|
||
|
||
; CALL SAVE_ROM_DATA
|
||
|
||
|
||
;LD B,10
|
||
TST_R: ;PUSH BC
|
||
|
||
; CALL READ_ID_ROM
|
||
; EX DE,HL
|
||
.jp+1: LD HL,0
|
||
JP (HL)
|
||
; LD HL,ROM_CHIP.SST39SF020A
|
||
; AND A
|
||
; SBC HL,DE
|
||
; JP Z,SST39SF020
|
||
|
||
; LD HL,#76BF ; !HARDCODE
|
||
; AND A
|
||
; SBC HL,DE
|
||
; JP Z,SST39SF020
|
||
|
||
; LD HL,#10BF ; !HARDCODE
|
||
; AND A
|
||
; SBC HL,DE
|
||
; JP Z,SST29EE020
|
||
|
||
; LD HL,#24BF ; !HARDCODE
|
||
; AND A
|
||
; SBC HL,DE
|
||
; JP Z,SST29EE020
|
||
|
||
; LD HL,#45DA ; !HARDCODE
|
||
; AND A
|
||
; SBC HL,DE
|
||
; JP Z,W29C020
|
||
|
||
;POP BC
|
||
;DJNZ TST_R
|
||
|
||
ITs_Unknown_Chip:
|
||
CALL SET_ROM_MODE.Normal
|
||
JP Program_exit.unsupported_chip
|
||
;----------------------------------------------------------------------;
|
||
/*
|
||
LD (.SP),SP
|
||
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,Spec_Page
|
||
OUT (SLOT3),A
|
||
|
||
.slot0+1: LD A,0
|
||
LD (Spec_Page.page_0),A
|
||
IN A,(SLOT1)
|
||
LD (Spec_Page.page_1),A
|
||
IN A,(SLOT2)
|
||
LD (Spec_Page.page_2),A
|
||
EX AF,AF'
|
||
LD (Spec_Page.page_3),A
|
||
|
||
LD HL,.restart
|
||
LD (Spec_Page.RET_addr),HL
|
||
|
||
; Set Spec_Page
|
||
LD A,DCP_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,ACEX.RET_PORT
|
||
LD (#C400),A
|
||
LD BC,0
|
||
LD A,Spec_Page
|
||
OUT (C),A
|
||
; reset
|
||
LD A,16
|
||
LD BC,#1FFD
|
||
OUT (C),A
|
||
LD A,RESET_PAGE
|
||
OUT (SLOT3),A
|
||
.loop: LD (#C000),A ; ¢ íâ®â ¬®¬¥â ¯®¤ ¥âáï RESET
|
||
JR .loop
|
||
;
|
||
|
||
.restart:
|
||
LD A,SYS_PORT.CNF_0
|
||
OUT (SYS_PORT.OFF),A
|
||
.SP+1: LD SP,0
|
||
JP Program_exit.unsupported_chip
|
||
*/
|
||
;----------------------------------------------------------------------;
|
||
|
||
; ERROR_ROM: ; !TODO ᤥ« âì ®à¬ «ìë© ¢ë室 ¢ ¤®á ¥á«¨ 稯 ¥ ¤¥â¥ªâ¨âáï.
|
||
; LD A,COLORS.CGA.BORDER.BLACK
|
||
; OUT (BorderColor),A
|
||
; LD A,COLORS.CGA.BORDER.CYAN
|
||
; OUT (BorderColor),A
|
||
; JR ERROR_ROM
|
||
;=======================================
|
||
; IF _dIs_Updater
|
||
;---------------------------------------
|
||
BUILD_FIRMWARE: LD A,DrawProgress.Verify
|
||
CALL DrawProgress.start
|
||
; á ç « § £à㦠¥¬ ¨ 祪 ¥¬ ⮫쪮 ¡¨®á
|
||
LD IX,(OFFSETS.BIOS) ; ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD HL,(OFFSETS.BIOS+2) ; áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD DE,CHECKSUMS.BIOS
|
||
LD BC,#101C ; !HARDCODE RAM for Bios file: #10 - first page, #1C - last page+1
|
||
CALL Read_And_Check
|
||
|
||
; ¢ë¡¨à ¥¬ ª ª®© ¡¨âáâਬ £ âì ¢ ¯ ¬ïâì
|
||
DI
|
||
LD A,ROM_BITSTREAM.ROM
|
||
OUT (SYS_PORT.ON),A
|
||
LD A,ROM_BITSTREAM.PAGE
|
||
OUT (ROM.SLOT0),A
|
||
LD HL,ROM_BITSTREAM.OFFSET+ROM_BITSTREAM.CHIP
|
||
|
||
LD A,(HL)
|
||
LD B,A
|
||
XOR A
|
||
OUT (ROM.SLOT0),A
|
||
OUT (SYS_PORT.OFF),A
|
||
;
|
||
LD A,B
|
||
CP ROM_BITSTREAM.K50
|
||
JR NZ,.chek_k30
|
||
;
|
||
LD A,"5"
|
||
JR .save_chip
|
||
;
|
||
.chek_k30: CP ROM_BITSTREAM.K30
|
||
JP NZ,Program_exit.conf
|
||
LD A,"3"
|
||
.save_chip: LD (altera_chip),A ; á®åà 塞 ®¬¥à 稯 3 ¨«¨ 5 (1K30 ¨«¨ 1K50)
|
||
;
|
||
.check_mode: LD A,(ONLY_BIOS)
|
||
INC A
|
||
JR Z,SAVE_BITSTREAM ; ®áâ ¢«ï¥¬ ¡¨âáâਬ ¯®«ì§®¢ ⥫ï
|
||
LD A,B
|
||
;--------------[Check bitstreams]
|
||
LOAD_BITSTREAM:
|
||
;---[K30]
|
||
CP ROM_BITSTREAM.K30
|
||
JR NZ,.next
|
||
LD IX,(OFFSETS.K30) ; ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD HL,(OFFSETS.K30+2) ; áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD DE,CHECKSUMS.K30
|
||
LD BC,#1C20 ; !HARDCODE high ç «ì ï_áâà ¨æ low ª®¥ç ï_áâà ¨æ +1
|
||
JP Read_And_Check
|
||
;------[]
|
||
.next: CP ROM_BITSTREAM.K50
|
||
JR NZ,.error
|
||
LD IX,(OFFSETS.K50) ; ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD HL,(OFFSETS.K50+2) ; áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD DE,CHECKSUMS.K50
|
||
LD BC,#1C20 ; !HARDCODE high ç «ì ï_áâà ¨æ low ª®¥ç ï_áâà ¨æ +1
|
||
JP Read_And_Check
|
||
;---[check another]
|
||
; ¡ã¤ã饥
|
||
;1:
|
||
; CP ROM_BITSTREAM.XXX
|
||
; jr nz,1F
|
||
; ld ix,(OFFSETS.XXX) ; ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
; ld hl,(OFFSETS.XXX+2) ; áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
; ld de,CHECKSUMS.XXX
|
||
; ld bc,#1C20 ??? ; !HARDCODE high ç «ì ï_áâà ¨æ low ª®¥ç ï_áâà ¨æ +1
|
||
; jp Read_And_Check
|
||
;----------------[]
|
||
.error: JP Program_exit.conf ; ¥á«¨ ¡¨âáâਬ ¥¨§¢¥áâë© - ¢ë室 á ®è¨¡ª®©
|
||
;------------------------------[]
|
||
;---------------------------------------
|
||
|
||
;---------------------------------------
|
||
;-[‘®åà 塞 ¡¨âáâਬ ¯®«ì§®¢ ⥫ï]-[v]
|
||
SAVE_BITSTREAM:
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
LD A,#1C ; !HARDCODE
|
||
OUT (SLOT3),A
|
||
|
||
LD A,(FILE_HANDLE)
|
||
LD HL,#C000 ; !HARDCODE
|
||
LD DE,ROM_BITSTREAM.OFFSET
|
||
LD C,Dss.Read ; § £à㦠¥¬ loader ¤«ï ª®äë
|
||
RST ToDSS
|
||
DI
|
||
JP C,Program_exit.file
|
||
AND A
|
||
JP NZ,Program_exit.file
|
||
|
||
;---[Loader checksum check]
|
||
LD BC,0
|
||
LD DE,0
|
||
LD HL,#C000
|
||
|
||
.checksumLoop:
|
||
LD A,C
|
||
ADD A,(HL)
|
||
LD C,A
|
||
JR NC,.NO_SM1
|
||
LD A,B
|
||
ADD A,(HL)
|
||
LD B,A
|
||
JR NC,.NO_SM1
|
||
LD A,E
|
||
ADD A,(HL)
|
||
LD E,A
|
||
JR NC,.NO_SM1
|
||
LD A,D
|
||
ADD A,(HL)
|
||
LD D,A
|
||
; JR NC,NO_SM1
|
||
.NO_SM1:
|
||
INC L ; ¯à®¢¥àª ª®â஫쮩 á㬬ë 256 (0-255) ¡ ©â®¢ «® ¤¥à
|
||
JR NZ,.checksumLoop
|
||
|
||
XOR A
|
||
LD HL,(CHECKSUMS.LOADER)
|
||
SBC HL,BC
|
||
JP NZ,Program_exit.checksum
|
||
XOR A
|
||
LD HL,(CHECKSUMS.LOADER+2)
|
||
SBC HL,DE
|
||
JP NZ,Program_exit.checksum
|
||
;---[x]
|
||
|
||
LD A,ROM_BITSTREAM.ROM
|
||
OUT (SYS_PORT.ON),A
|
||
LD A,ROM_BITSTREAM.PAGE
|
||
OUT (ROM.SLOT0),A
|
||
LD HL,ROM_BITSTREAM.OFFSET
|
||
LD DE,#C000+ROM_BITSTREAM.OFFSET
|
||
LD BC,#4000-ROM_BITSTREAM.OFFSET
|
||
LDIR ; á®åà 塞 ¡¨âáâਬ 1/4
|
||
|
||
EX AF,AF'
|
||
LD A,3
|
||
EX AF,AF'
|
||
|
||
EXX
|
||
LD BC,SLOT3
|
||
IN B,(C)
|
||
.loop:
|
||
INC B
|
||
OUT (C),B
|
||
EXX
|
||
|
||
INC A
|
||
OUT (ROM.SLOT0),A
|
||
|
||
EX DE,HL
|
||
LD B,D
|
||
LD C,E ; ld hl,0 bc,#4000
|
||
LD DE,#C000
|
||
LDIR ; á®åà 塞 ¡¨âáâਬ 2/4 - 4/4
|
||
|
||
EX AF,AF'
|
||
DEC A
|
||
JR Z,.change_number
|
||
EX AF,AF'
|
||
|
||
EXX
|
||
CALL DrawProgress.next
|
||
JP .loop
|
||
;-[‘®åà 塞 ¡¨âáâਬ ¯®«ì§®¢ ⥫ï]-[^]
|
||
;
|
||
.change_number:
|
||
XOR A
|
||
OUT (ROM.SLOT0),A
|
||
OUT (SYS_PORT.OFF),A
|
||
|
||
; ¬¥ï¥¬ âãâ ID ª®äë ¢ ¡¨®á¥
|
||
LD A,#18 ; !HARDCODE áâà ¨æ á EXP
|
||
OUT (SLOT3),A
|
||
.romCNFversion+1:
|
||
LD DE,0
|
||
LD (#C000+expBIOS_Vars.FN_CRIPT.cnf),DE
|
||
LD HL,#C000+expBIOS_Vars.ID_SPRINTER.bitstream_ver
|
||
LD C,D
|
||
M_hex2dec2ascii_8bit 1
|
||
INC HL
|
||
LD (HL),'.'
|
||
INC HL
|
||
LD C,E
|
||
M_hex2dec2ascii_8bit 2
|
||
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
RET
|
||
;---------------------------------------
|
||
|
||
|
||
;---------------------------------------
|
||
|
||
;
|
||
; ¢å®¤¥ IX:IY - ᬥ饨¥
|
||
SET_OFFSET:
|
||
LD A,(FILE_HANDLE)
|
||
LD B,0
|
||
LD C,Dss.Move_FP
|
||
RST ToDSS
|
||
DI
|
||
JP C,Program_exit.file
|
||
RET
|
||
;
|
||
|
||
; ‚室:
|
||
; ix - ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
; hl - áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
; DE - ¤à¥á ¢ ¯ ¬ïâ¨ á ª®â஫쮩 á㬬®©
|
||
; B - ç «ì ï áâà ¨æ ¤«ï ä ©«
|
||
; C - ª®¥ç ï áâà ¨æ ¤«ï ä ©«
|
||
Read_And_Check: LD A,B
|
||
LD (.first_page),A
|
||
LD (Checksum_Check.first_page),A
|
||
|
||
LD A,C
|
||
LD (.last_page),A
|
||
LD (Checksum_Check.last_page),A
|
||
|
||
LD (Checksum_Check.compare),DE
|
||
|
||
LD A,(FILE_HANDLE)
|
||
LD BC,0*256+Dss.Move_FP
|
||
RST ToDSS
|
||
DI
|
||
JP C,Program_exit.file
|
||
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
|
||
.first_page+1: LD A,#10
|
||
OUT (SLOT3),A
|
||
|
||
.loop: LD A,(FILE_HANDLE)
|
||
LD HL,#C000
|
||
LD DE,#4000
|
||
LD C,Dss.Read
|
||
RST ToDSS
|
||
DI
|
||
JP C,Program_exit.file
|
||
AND A
|
||
LD HL,#4000
|
||
SBC HL,DE
|
||
JP NZ,Program_exit.file
|
||
|
||
IN A,(SLOT3)
|
||
INC A
|
||
OUT (SLOT3),A
|
||
|
||
; CP #1C
|
||
; CALL Z,LOAD_BITSTREAM
|
||
.last_page+1: CP #20
|
||
JR NZ,.loop
|
||
|
||
Checksum_Check:
|
||
|
||
; LD A,#10
|
||
; OUT (SLOT3),A
|
||
/*
|
||
LD A,PROGRESS_BAR.VERIFY
|
||
CALL DrawProgress.start
|
||
*/
|
||
; LD IX,.ch_b
|
||
EXX
|
||
LD BC,0
|
||
LD DE,0
|
||
EXX
|
||
.first_page+1: LD A,#10
|
||
|
||
.main_loop:
|
||
OUT (SLOT3),A
|
||
PUSH AF
|
||
|
||
EXX
|
||
LD HL,#C000
|
||
.loop:
|
||
LD A,C
|
||
ADD A,(HL)
|
||
LD C,A
|
||
JR NC,.NO_SM1
|
||
LD A,B
|
||
ADD A,(HL)
|
||
LD B,A
|
||
JR NC,.NO_SM1
|
||
LD A,E
|
||
ADD A,(HL)
|
||
LD E,A
|
||
JR NC,.NO_SM1
|
||
LD A,D
|
||
ADD A,(HL)
|
||
LD D,A
|
||
; JR NC,NO_SM1
|
||
.NO_SM1:
|
||
INC HL
|
||
LD A,H
|
||
OR L
|
||
JR NZ,.loop
|
||
|
||
EXX
|
||
LD B,PROGRESS_BAR.PIXELS / 16
|
||
.progress: CALL DrawProgress.next
|
||
DJNZ .progress
|
||
|
||
POP AF
|
||
INC A
|
||
|
||
.last_page+1: CP #20
|
||
JR NZ,.main_loop
|
||
|
||
EXX
|
||
LD (.ch_b),BC
|
||
LD (.ch_b+2),DE
|
||
EXX
|
||
|
||
;---[compare]
|
||
.compare+1: LD HL,0
|
||
LD DE,.ch_b
|
||
LD B,4
|
||
.ch_loop2:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
JP NZ,Program_exit.checksum
|
||
INC HL
|
||
INC DE
|
||
DJNZ .ch_loop2
|
||
;----------[]
|
||
/*
|
||
CALL DrawProgress.done
|
||
*/
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
RET
|
||
|
||
.ch_b: DB 0,0,0,0
|
||
;---------------------------------------
|
||
; ENDIF
|
||
;
|
||
;=======================================
|
||
|
||
|
||
W29C020:
|
||
SST29EE020: CALL ROM_PIC._29EE020
|
||
CALL ERASE._29EE020
|
||
CALL WRITE_29EE020
|
||
CALL Pause._200msek
|
||
;
|
||
LD A,DrawProgress.Verify
|
||
CALL DrawProgress.start
|
||
CALL VERIFY
|
||
;
|
||
JP RESET
|
||
|
||
SST39SF020: CALL ROM_PIC._39SF020
|
||
|
||
LD HL,1000
|
||
LD (Pause.Erase),HL ; mem patch
|
||
|
||
; XOR A ;LD A,DrawProgress.Erase
|
||
; CALL DrawProgress.start
|
||
CALL ERASE._39SF020
|
||
|
||
|
||
; LD A,4+D_TBOFF ; ®âª«îç¨âì âãà¡® ¯à¨ § ¯¨á¨ 39SF020
|
||
; LD A,4+D_TBON
|
||
; OUT (SYS_PORT.OFF),A ; CNF0
|
||
|
||
; LD A,DrawProgress.Write
|
||
; CALL DrawProgress.start
|
||
CALL WRITE_39SF020
|
||
|
||
; LD A,4+D_TBOFF
|
||
; LD A,4+D_TBON
|
||
; OUT (SYS_PORT.OFF),A ; CNF0
|
||
LD A,DrawProgress.Verify
|
||
CALL DrawProgress.start
|
||
CALL VERIFY
|
||
|
||
; LD A,4+D_TBON
|
||
; OUT (SYS_PORT.OFF),A ; CNF0
|
||
|
||
JP RESET
|
||
|
||
COUNT_ALL: DB 0
|
||
|
||
;*********************************
|
||
|
||
RESET:
|
||
DI
|
||
|
||
// IN A,(SLOT1)
|
||
// PUSH AF
|
||
// LD A,DCP_PAGE
|
||
// OUT (SLOT1),A ; set DCP page
|
||
// LD A,ACEX.RESET
|
||
// LD (#4400),A ; open for WR
|
||
// LD (#4600),A ; open for RD
|
||
LD BC,ACEX.RESET*256+ACEX.RESET
|
||
CALL SET_DCP_PORT
|
||
|
||
;nop
|
||
;!TEST Full init ¯®á«¥ ¯¥à¥¯à®è¨¢ª¨ ¨ à¥á¥â , ¢á直© á«ãç ©
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT1),A
|
||
XOR A
|
||
LD (SYS_PAGE.ID_FLAG-#8000),A
|
||
;
|
||
POP AF
|
||
OUT (SLOT1),A ; Close SLOT1
|
||
LD A,COLORS.CGA.BORDER.BLACK
|
||
OUT (BorderColor),A
|
||
|
||
LD A,CNF_PORT.CNF_0+CNF_PORT.TURBO.OFF
|
||
OUT (SYS_PORT.ON),A ; CNF0
|
||
|
||
CALL Pause._200msek
|
||
|
||
LD A,CNF_PORT.CNF_0+CNF_PORT.TURBO.ON
|
||
OUT (SYS_PORT.ON),A ; CNF0
|
||
|
||
RESET_LOOP:
|
||
;!TEST
|
||
;LD BC,#0100
|
||
;OUT (C),C
|
||
;LD BC,0
|
||
;OUT (C),C
|
||
LD A,Port_HardReset.Step1
|
||
OUT (Port_HardReset),A
|
||
DEC A
|
||
OUT (Port_HardReset),A
|
||
;
|
||
JR RESET_LOOP
|
||
|
||
DI
|
||
HALT
|
||
;*********************************
|
||
|
||
VERIFY: IN A,(SLOT1)
|
||
PUSH AF
|
||
CALL Pause._200msek
|
||
LD A,#1F
|
||
LD (vf_num),A
|
||
vf_loop:
|
||
LD E,CHIP_CMD.SST.ID_Exit
|
||
CALL L29EE.CMD
|
||
CALL Pause._50msek
|
||
CALL WAIT_TOGGLE
|
||
CALL Pause._50msek
|
||
; LD A,DrawProgress.Verify
|
||
; CALL DrawProgress.start
|
||
|
||
; ¥á«¨ ¡ã¤¥â ®è¨¡ª ¢ á ¬®¬ ç «¥ ®¡à § ¯à¨ ¢¥à¨ä¨ª 樨 § ¯¨á¨, â® å®âì ¥¬®£® ¯®¤ñ࣠¥âáï ¯à®£à¥áá¡ à
|
||
;CALL DrawProgress.next
|
||
;CALL DrawProgress.next
|
||
|
||
LD A,#10
|
||
TST_X:
|
||
EX AF,AF' ;!!!!!
|
||
LD HL,#4000
|
||
LD DE,0
|
||
LOOP_VF1X:
|
||
LD BC,0
|
||
EX AF,AF'
|
||
OUT (SLOT1),A
|
||
OUT (C),A
|
||
EX AF,AF'
|
||
|
||
LOOP_VF1:
|
||
;!TEST
|
||
; LD A,(DE)
|
||
; CP (HL)
|
||
; JR nz,error_xx
|
||
|
||
; INC L
|
||
; INC E
|
||
; JR NZ,LOOP_VF1
|
||
|
||
; IVAN
|
||
LD A,(DE)
|
||
XOR (HL)
|
||
OR B
|
||
LD B,A
|
||
INC L
|
||
INC E
|
||
|
||
LD A,(DE)
|
||
XOR (HL)
|
||
OR B
|
||
LD B,A
|
||
INC L
|
||
INC E
|
||
JR NZ,LOOP_VF1
|
||
|
||
AND A
|
||
JR NZ,error_xx
|
||
;
|
||
|
||
OUT (C),C ; ¢®§¢à é ¥¬ ®¡à â® 0 áâà ¨æã ROM
|
||
|
||
LD A,(vf_num)
|
||
AND 3
|
||
LD (vf_num),A
|
||
|
||
LD A,H
|
||
;AND 7 ;!HARDCODE DrawProgress
|
||
;CP 7
|
||
AND 15 ;!HARDCODE DrawProgress
|
||
CP 15
|
||
CALL Z,DrawProgress.next
|
||
|
||
INC H
|
||
INC D
|
||
BIT 7,H
|
||
JR Z,LOOP_VF1X ; !!!!! â®ç® LOOP_VF1X, ¥ LOOP_VF1 ?
|
||
|
||
EX AF,AF'
|
||
INC A
|
||
CP #20
|
||
JR NZ,TST_X
|
||
|
||
CALL DrawProgress.done
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
RET
|
||
|
||
error_xx: LD A,COLORS.CGA.BORDER.CYAN
|
||
OUT (BorderColor),A
|
||
|
||
LD A,(vf_num)
|
||
DEC A
|
||
LD (vf_num),A
|
||
JR NZ,vf_loop
|
||
JR ERROR_X
|
||
|
||
vf_num: DB 3
|
||
;**********************************
|
||
ERROR_X:
|
||
HALTS: LD BC,0
|
||
OUT (C),C
|
||
SV_PG1+1: LD A,0
|
||
OUT (SLOT1),A
|
||
JP REWRITE
|
||
; JP VERIFY
|
||
|
||
;SV_PG1: DB 0
|
||
|
||
;************************************
|
||
; IFN _dIs_Updater
|
||
; ;---------------------------------------
|
||
; READ_FROM_FILE:
|
||
|
||
; LD A,1
|
||
; LD HL,ROM_FILE
|
||
; LD C,Dss.Open
|
||
; RST ToDSS
|
||
; ; !FIXIT error handler FLASHER
|
||
; DI
|
||
|
||
; JR C,Program_exit.file
|
||
; LD (FILE_HANDLE),A
|
||
|
||
; IN A,(SLOT3)
|
||
; PUSH AF
|
||
; LD A,10h
|
||
; OUT (SLOT3),A
|
||
|
||
; LOOP_READ:
|
||
; LD A,(FILE_HANDLE)
|
||
; LD HL,#C000
|
||
; LD DE,#4000
|
||
; LD C,Dss.Read
|
||
; RST ToDSS
|
||
; DI
|
||
; JR C,Program_exit.file
|
||
; AND A
|
||
; LD HL,#4000
|
||
; SBC HL,DE
|
||
; JR NZ,Program_exit.file
|
||
|
||
; IN A,(SLOT3)
|
||
; INC A
|
||
; OUT (SLOT3),A
|
||
|
||
; CP #20
|
||
; JR NZ,LOOP_READ
|
||
|
||
; LD A,(FILE_HANDLE)
|
||
; LD C,Dss.Close
|
||
; RST ToDSS
|
||
; DI
|
||
|
||
; JR C,Program_exit.file
|
||
|
||
; Checksum_Check:
|
||
; LD A,#10
|
||
; OUT (SLOT3),A
|
||
|
||
; LD HL,#C004 ; !TODO ‘®¡¨à âì ¡¨®á áà §ã á 祪á㬬®©? € âãâ ⮣¤ ¢áâ ¢«ïâì #FF.
|
||
; LD DE,.ch_a
|
||
; LD BC,4
|
||
; LDIR
|
||
|
||
; LD HL,#FFFF
|
||
; LD (#C004),HL ; !TODO ¥á«¨ ¤¥« âì ª ª ¯¨á ® ¢ëè¥, â® ¤«ï €¯¤¥©â¥à íâã ç áâì ã¡à âì ãá«®¢¨¥¬ ª®¬¯¨«ï樨
|
||
; LD (#C006),HL ; !TODO
|
||
|
||
; LD A,PROGRESS_BAR.VERIFY
|
||
; CALL DrawProgress.start
|
||
|
||
; ; LD IX,.ch_b
|
||
; EXX
|
||
; LD BC,0
|
||
; LD DE,0
|
||
; EXX
|
||
; LD A,#10
|
||
|
||
; .main_loop:
|
||
; OUT (SLOT3),A
|
||
; PUSH AF
|
||
|
||
; EXX
|
||
; LD HL,#C000
|
||
; .loop:
|
||
; LD A,C
|
||
; ADD A,(HL)
|
||
; LD C,A
|
||
; JR NC,.NO_SM1
|
||
; LD A,B
|
||
; ADD A,(HL)
|
||
; LD B,A
|
||
; JR NC,.NO_SM1
|
||
; LD A,E
|
||
; ADD A,(HL)
|
||
; LD E,A
|
||
; JR NC,.NO_SM1
|
||
; LD A,D
|
||
; ADD A,(HL)
|
||
; LD D,A
|
||
; ; JR NC,NO_SM1
|
||
; .NO_SM1:
|
||
; INC HL
|
||
; LD A,H
|
||
; OR L
|
||
; JR NZ,.loop
|
||
|
||
; EXX
|
||
; LD B,8
|
||
|
||
; .progress:
|
||
; CALL DrawProgress.next
|
||
; DJNZ .progress
|
||
|
||
; POP AF
|
||
; INC A
|
||
|
||
; CP #20
|
||
; JR NZ,.main_loop
|
||
|
||
; EXX
|
||
; LD (.ch_b),BC
|
||
; LD (.ch_b+2),DE
|
||
; EXX
|
||
|
||
; LD HL,(.ch_a)
|
||
; LD DE,(.ch_b)
|
||
; XOR A
|
||
; SBC HL,DE
|
||
; JR NZ,Program_exit.checksum
|
||
|
||
; LD HL,(.ch_a+2)
|
||
; LD DE,(.ch_b+2)
|
||
; XOR A
|
||
; SBC HL,DE
|
||
; JR NZ,Program_exit.checksum
|
||
|
||
; CALL DrawProgress.done
|
||
; POP AF
|
||
; OUT (SLOT3),A
|
||
; RET
|
||
|
||
; .ch_a: DB 0,0,0,0
|
||
; .ch_b: DB 0,0,0,0
|
||
|
||
; ENDIF
|
||
|
||
SET_DCP_PORT:
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
LD A,DCP_PAGE
|
||
OUT (SLOT1),A ; set dcp page
|
||
LD A,(#4400)
|
||
LD L,A
|
||
LD A,(#4600)
|
||
LD H,A
|
||
LD A,C
|
||
LD (#4400),A ; open for wr
|
||
LD A,B
|
||
LD (#4600),A ; open for rd
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
RET
|
||
|
||
;----------------[EXITS]-------------[v]
|
||
Program_exit:
|
||
.unsupported_chip:
|
||
LD HL,PROGRAM_MESSAGES.UNKNOWN_CHIP
|
||
LD BC,DSS_Error.sys.COMMON_ERROR*256+Dss.Exit
|
||
JR .exit
|
||
.no_BoardID:
|
||
LD HL,PROGRAM_MESSAGES.NO_BOARDID
|
||
LD BC,DSS_Error.sys.COMMON_ERROR*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.checksum:
|
||
LD HL,PROGRAM_MESSAGES.CHECKSUM
|
||
LD BC,DSS_Error.sys.CRC_ERROR*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.conf:
|
||
LD HL,PROGRAM_MESSAGES.CONF
|
||
LD BC,DSS_Error.sys.COMMON_ERROR*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.free_mem:
|
||
LD HL,PROGRAM_MESSAGES.MEM
|
||
LD BC,DSS_Error.sys.NOT_ENOUGH_MEMORY*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.video_mode:
|
||
LD HL,PROGRAM_MESSAGES.VIDEOMODE
|
||
LD BC,DSS_Error.sys.INVALID_VIDEO_MODE*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.file:
|
||
LD HL,PROGRAM_MESSAGES.FILE
|
||
LD BC,DSS_Error.sys.READ_ERROR*256+Dss.Exit
|
||
JR .exit
|
||
|
||
.no_errors:
|
||
LD HL,PROGRAM_MESSAGES.GOODLUCK
|
||
LD BC,DSS_Error.sys.NO_ERROR*256+Dss.Exit
|
||
; JR .exit
|
||
.exit: PUSH BC
|
||
PUSH HL
|
||
|
||
vid_mod_save+1: LD A,3
|
||
scr_num_save+1: LD B,1
|
||
LD C,Dss.SetVMod
|
||
RST ToDSS
|
||
|
||
cursor_restore+1:
|
||
LD DE,0000
|
||
LD C,Dss.Locate
|
||
RST ToDSS
|
||
|
||
POP HL
|
||
LD C,Dss.PChars
|
||
RST ToDSS
|
||
|
||
.loop: POP BC
|
||
PUSH BC
|
||
RST ToDSS
|
||
; ¯ëâ ¥¬áï ¢ë©â¨ «î¡®© 楮©)))
|
||
JR .loop
|
||
;
|
||
;/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\
|
||
PROGRAM_MESSAGES:
|
||
; IF _dIs_Updater
|
||
.FILE: DZ 13,10,'Updater:\> Error: Read failure. ROM updater may be corrupted',13,10,10
|
||
.MEM: DZ 13,10,'Updater:\> Error: Not enough free memory!',13,10,10
|
||
; ELSE
|
||
; .FILE: DZ 13,10,13,10,'Updater:\> Error: ROM file is corrupt',13,10
|
||
; ENDIF
|
||
.VIDEOMODE: DZ 13,10,'Updater:\> Error: Failed to initialize video mode!',13,10,10
|
||
.CHECKSUM: DZ 13,10,'Updater:\> Error: Checksum is not correct!',13,10,10
|
||
.CONF: DZ 13,10,'Updater:\> Error: Unsupported Altera installed!',13,10,10
|
||
.NO_BOARDID: DZ 13,10,'Updater:\> Error: Unable to get board id from BIOS!',13,10,10
|
||
.UNKNOWN_CHIP DZ 13,10,'Updater:\> Error: Unsupported ROM Chip installed!',13,10,10
|
||
.GOODLUCK: DZ 13,10,'Updater:\> Good luck)))',13,10,10
|
||
|
||
; IFN _dIs_Updater
|
||
; BEGIN_MSG: DZ 13,10,"FLASH-ROM rewriter for Sprinter. Programmed by Ivan Mak."
|
||
; ROM_FILE: DB '_sprin.bin',0,0,0,0,0,0,0,0,0,0,0
|
||
; ENDIF
|
||
|
||
; IF _dIs_Updater
|
||
END_MSG: DZ 'Your ROM now rewrited! Press RESET please.'
|
||
START_MSG: DB 13,10,10
|
||
DB 'ROM updater to ',HARDWARE_VERSION,' hardware and ',BIOS_VERSION,' BIOS',BIOS_BETA_VERSION,'versions.',13,10
|
||
DB '2002 (',#91,') Peters Plus Ltd,',13,10
|
||
DB SP_TEAM_YEAR,' (',#91,') Sprinter Team.',13,10,10,10,10,10
|
||
DB 'Your ROM will be reflashed',13,10
|
||
DB 'This operation can destroy your BIOS information if a power failure occurs!',13,10,10
|
||
DB 'Do not press any keys while reflashing!',13,10
|
||
DB 'After reflashing, your computer will restart.',13,10
|
||
DZ 'Contact Sprinter Team if you need help.',13,10,10
|
||
.afterPICyes_R: DB 'Press "Y" to start full reflashing or "R" for reflashing only BIOS and ZX-ROMs.',13,10
|
||
DB 'If you need a pause to change the ROM before flashing, press "P".',13,10
|
||
DZ 'Press any other key to cancel.',13,10
|
||
.afterPICno_R: DZ 'Press "Y" to start full reflashing or any other key to cancel.',13,10 ; !FIXIT pause
|
||
.PauseTXT: DZ 'Pause: '
|
||
.PauseON: DZ 'ON. Green border means waiting for any key to be pressed to continue.' ; /¤®«¦ ¡ëâì ®¤¨ ª®¢ ï ¤«¨ \
|
||
.PauseOFF: DZ 'OFF. ' ; \¤®«¦ ¡ëâì ®¤¨ ª®¢ ï ¤«¨ /
|
||
; ENDIF
|
||
;/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\
|
||
;------------------------------------[^]
|
||
;
|
||
|
||
;------------------------------------[v]
|
||
; IF _dIs_Updater
|
||
|
||
READ_ID_ROM: AND A
|
||
.no_draw: PUSH AF
|
||
LD E,CHIP_CMD.ANY.ID
|
||
CALL L29EE.CMD
|
||
|
||
CALL Pause._50msek
|
||
|
||
LD BC,0
|
||
LD A,#10
|
||
OUT (C),A
|
||
LD HL,(0) ; rdlow-ok
|
||
OUT (C),C
|
||
|
||
POP AF
|
||
PUSH HL
|
||
PUSH AF
|
||
LD E,CHIP_CMD.SST.ID_Exit
|
||
CALL L29EE.CMD
|
||
POP AF
|
||
JR C,.exit
|
||
;
|
||
CALL Pause._50msek
|
||
.exit: POP HL
|
||
RET
|
||
|
||
ERASE:
|
||
._39SF020:
|
||
._29EE020: CALL READ_ID_ROM
|
||
CALL Pause._200msek
|
||
|
||
LD E,CHIP_CMD.SST.Erase
|
||
CALL L29EE.CMD
|
||
LD E,#20 ; data protect disable
|
||
CALL L29EE.CMD
|
||
|
||
CALL Pause._200msek
|
||
|
||
LD E,CHIP_CMD.SST.Erase
|
||
CALL L29EE.CMD
|
||
LD E,#10 ; Full chip erase
|
||
CALL L29EE.CMD
|
||
|
||
LD A,DrawProgress.Erase
|
||
CALL DrawProgress.start
|
||
|
||
LD B,128 ; ¥®¡å®¤¨¬ ï § ¤¥à¦ª
|
||
LD A,128 / PROGRESS_BAR.PIXELS
|
||
OR A
|
||
JR NZ,.no_chg_A
|
||
LD A,1
|
||
;
|
||
.no_chg_A: PUSH AF
|
||
.LOOP_ERAS: CALL Pause._10msek
|
||
DEC A
|
||
JR NZ,.DJNZ
|
||
;
|
||
CALL DrawProgress.next
|
||
POP AF
|
||
PUSH AF
|
||
.DJNZ: DJNZ .LOOP_ERAS
|
||
POP AF
|
||
CALL WAIT_TOGGLE
|
||
|
||
CALL DrawProgress.done
|
||
|
||
RET
|
||
|
||
;*********************************************
|
||
|
||
WRITE_39SF020: LD A,DrawProgress.Write
|
||
CALL DrawProgress.start
|
||
|
||
; IN A,(SLOT1)
|
||
; LD (SV_PG1),A
|
||
|
||
LD A,#10
|
||
LD HL,#4000
|
||
LD DE,0
|
||
|
||
LOOP_WS2: OUT (SLOT1),A
|
||
EX AF,AF'
|
||
|
||
LOOP_WB2: LD A,(HL)
|
||
CP #FF
|
||
JR Z,NO_WRITE
|
||
|
||
PUSH DE
|
||
LD E,#A0
|
||
CALL L29EE.CMD
|
||
POP DE
|
||
|
||
LD BC,0
|
||
EX AF,AF'
|
||
OUT (C),A
|
||
EX AF,AF'
|
||
|
||
LD A,(HL)
|
||
LD (DE),A
|
||
NOP
|
||
OUT (C),C
|
||
|
||
CALL WAIT_TOGGLE
|
||
|
||
NO_WRITE: INC L
|
||
INC E
|
||
JR NZ,LOOP_WB2
|
||
INC H
|
||
INC D
|
||
LD A,D
|
||
;AND 7
|
||
;CP 7
|
||
AND 31 ;!HARDCODE DrawProgress
|
||
CP 31
|
||
CALL Z,DrawProgress.next
|
||
|
||
LD A,D
|
||
CP #40
|
||
JR NZ,LOOP_WB2
|
||
|
||
LD HL,#4000
|
||
LD DE,0
|
||
|
||
CALL DrawProgress.next
|
||
CALL DrawProgress.next
|
||
|
||
EX AF,AF'
|
||
INC A
|
||
CP #20
|
||
JR NZ,LOOP_WS2
|
||
|
||
CALL DrawProgress.done
|
||
|
||
LD A,(SV_PG1)
|
||
OUT (SLOT1),A
|
||
RET
|
||
/*
|
||
ERROR_Y:
|
||
DI
|
||
HALT
|
||
*/
|
||
WRITE_29EE020:
|
||
; CALL READ_ID_ROM
|
||
|
||
CALL L29EE.OFF
|
||
CALL Pause._200msek
|
||
CALL WAIT_TOGGLE
|
||
|
||
LD A,DrawProgress.Write
|
||
CALL DrawProgress.start
|
||
|
||
; ¥á«¨ ¡ã¤¥â ®è¨¡ª § ¯¨á¨ ¢ á ¬®¬ ç «¥, â® å®âì ¥¬®£® ¯®¤ñ࣠¥âáï ¯à®£à¥áá¡ à
|
||
CALL DrawProgress.next
|
||
CALL DrawProgress.next
|
||
|
||
; IN A,(SLOT1)
|
||
; LD (SV_PG1),A
|
||
|
||
LD A,#10
|
||
PUSH AF
|
||
LD HL,#4000
|
||
LD DE,0
|
||
LOOP_WS: POP AF
|
||
PUSH AF
|
||
EX AF,AF'
|
||
POP AF
|
||
PUSH AF
|
||
EX AF,AF'
|
||
|
||
PUSH HL
|
||
PUSH DE
|
||
CALL WRITE_SECTOR
|
||
JP C,HALTS ; error
|
||
POP DE
|
||
POP HL
|
||
|
||
|
||
; = #4000 / (64 / 16)
|
||
; 524288/64
|
||
LD A,D
|
||
;AND 15
|
||
;CP 15
|
||
AND 31 ;!HARDCODE DrawProgress
|
||
CP 31
|
||
CALL Z,DrawProgress.next
|
||
|
||
LD BC,#80
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
|
||
LD A,D
|
||
CP #40
|
||
JR NZ,LOOP_WS
|
||
|
||
LD HL,#4000
|
||
LD DE,#0000
|
||
|
||
POP AF
|
||
INC A
|
||
CP #20
|
||
PUSH AF
|
||
JR NZ,LOOP_WS
|
||
POP AF
|
||
|
||
CALL DrawProgress.done
|
||
|
||
LD A,(SV_PG1)
|
||
OUT (SLOT1),A
|
||
RET
|
||
|
||
; A,HL - BUFER, A',DE - ROM_PLACE
|
||
WRITE_SECTOR: OUT (SLOT1),A
|
||
EXX
|
||
LD B,20
|
||
SECTOR_WRI1: EXX
|
||
|
||
PUSH DE
|
||
CALL L29EE.WR
|
||
POP DE
|
||
|
||
PUSH HL
|
||
PUSH DE
|
||
|
||
LD BC,0
|
||
EX AF,AF'
|
||
OUT (C),A
|
||
EX AF,AF'
|
||
|
||
LD BC,128 ; LEN BLK
|
||
LDIR ; WRITE !!!
|
||
|
||
OUT (C),C
|
||
|
||
CALL Pause._10msek
|
||
|
||
CALL WAIT_TOGGLE
|
||
|
||
POP DE
|
||
POP HL
|
||
PUSH HL
|
||
PUSH DE
|
||
|
||
EX AF,AF'
|
||
OUT (C),A
|
||
EX AF,AF'
|
||
|
||
LD B,128
|
||
LOOP_T: LD A,(DE)
|
||
CP (HL)
|
||
JR NZ,ERROR_SECTOR
|
||
|
||
INC HL
|
||
INC DE
|
||
DJNZ LOOP_T
|
||
|
||
OUT (C),C
|
||
|
||
POP BC ; delete stack elements
|
||
POP BC
|
||
AND A ; ok write_sector
|
||
RET
|
||
|
||
ERROR_SECTOR: LD B,C
|
||
OUT (C),C
|
||
|
||
POP DE ; restore adresses
|
||
POP HL
|
||
|
||
EXX
|
||
DJNZ SECTOR_WRI1
|
||
EXX
|
||
|
||
SCF ; error return
|
||
RET
|
||
|
||
|
||
WAIT_TOGGLE: PUSH AF
|
||
PUSH DE
|
||
PUSH HL
|
||
LD HL,0
|
||
|
||
LD A,(0) ; rdlow-ok
|
||
LD D,A
|
||
|
||
TOGGLE_LOOP: INC HL
|
||
LD A,H
|
||
OR L
|
||
JR Z,TOGGLE_X
|
||
|
||
; LD A,0
|
||
; BIT 6,D
|
||
; JR Z,ZZZZ1
|
||
; LD A,7
|
||
;ZZZZ1: OUT (0FEh),A
|
||
|
||
LD E,D
|
||
LD A,(0) ; rdlow-ok
|
||
LD D,A
|
||
|
||
; ;!TEST
|
||
; OUT (#FE),A
|
||
|
||
XOR E
|
||
AND #40
|
||
JR NZ,TOGGLE_LOOP
|
||
|
||
POP HL
|
||
POP DE
|
||
POP AF
|
||
AND A
|
||
RET
|
||
|
||
TOGGLE_X: POP HL
|
||
POP DE
|
||
POP AF
|
||
SCF
|
||
RET
|
||
|
||
; !TODO á®åà ïâì ®¡à § ¨«¨ ¥â?
|
||
SAVE_ROM_DATA: IN A,(SLOT1)
|
||
PUSH AF
|
||
|
||
LD A,#10
|
||
LOOP_SAVE: LD BC,0
|
||
OUT (C),A
|
||
OUT (SLOT1),A
|
||
LD HL,0
|
||
LD DE,#4000
|
||
LD BC,#4000
|
||
LDIR
|
||
INC A
|
||
CP #20
|
||
JR NZ,LOOP_SAVE
|
||
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
RET
|
||
|
||
;---------------------------------------
|
||
L29EE:
|
||
.OFF: LD E,#80
|
||
CALL .CMD
|
||
LD E,#20
|
||
JR .CMD
|
||
;
|
||
.WR: LD E,#A0
|
||
;JR .CMD
|
||
; CMD in E register
|
||
.CMD: LD BC,0
|
||
; wr_rom #5555,#AA
|
||
LD A,#11
|
||
OUT (C),A ;
|
||
LD A,#AA
|
||
LD (#1555),A
|
||
; wr_rom #2AAA,#55
|
||
LD A,#10
|
||
OUT (C),A ;
|
||
LD A,#55
|
||
LD (#2AAA),A
|
||
; wr_rom #5555,#80
|
||
LD A,#11
|
||
OUT (C),A ;
|
||
LD A,E
|
||
LD (#1555),A
|
||
OUT (C),C
|
||
RET
|
||
;---------------------------------------
|
||
Pause:
|
||
._50msek:
|
||
PUSH HL
|
||
PUSH AF
|
||
LD HL,10000
|
||
JR ._200
|
||
;
|
||
._10msek: PUSH HL
|
||
PUSH AF
|
||
.Erase+1: LD HL,200
|
||
JR ._200
|
||
;
|
||
._200msek: PUSH HL
|
||
PUSH AF
|
||
LD HL,20000
|
||
._200: INC HL
|
||
DEC HL
|
||
INC HL
|
||
DEC HL
|
||
DEC HL
|
||
LD A,H
|
||
OR L
|
||
JR NZ,._200
|
||
POP AF
|
||
POP HL
|
||
RET
|
||
;*******************************8
|
||
START_PIC: IN A,(SLOT1)
|
||
PUSH AF
|
||
LD BC,#FF*256+BIOS.PIC_SET_PAL
|
||
LD HL,PICTURE.bdPallete
|
||
LD DE,0
|
||
LD A,1
|
||
RST ToBIOS
|
||
|
||
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
ACC_SetBlockSize
|
||
LD A,0
|
||
ACC_Off
|
||
;xor a
|
||
OUT (PORT_Y),A
|
||
LD HL,#4000+Screen_Offset
|
||
LD DE,#4000+Screen_Offset+1
|
||
LD BC,319
|
||
ACC_FillScreenOneByte
|
||
LD (HL),A
|
||
LDIR
|
||
ACC_Off
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
PUSH AF
|
||
;
|
||
LD IX,(OFFSETS.PICTURE_2) ; ¬« ¤è¥¥ á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD HL,(OFFSETS.PICTURE_2+2) ; áâ à襥 á«®¢® á¬¥é¥¨ï ¢ ä ©«¥
|
||
LD A,(FILE_HANDLE)
|
||
LD B,0
|
||
LD C,Dss.Move_FP
|
||
RST ToDSS
|
||
JP C,Program_exit.file
|
||
;
|
||
DI
|
||
;
|
||
IF MAIN_PICTURE.PIC_WIDTH < 256
|
||
ACC_SetBlockSize
|
||
LD A,low MAIN_PICTURE.PIC_WIDTH
|
||
ACC_Off
|
||
ENDIF
|
||
;
|
||
LD A,#FF - MAIN_PICTURE.PIC_Y
|
||
.loop_pic: PUSH AF
|
||
LD A,(FILE_HANDLE)
|
||
LD HL,.pic_buffer
|
||
LD DE,MAIN_PICTURE.PIC_WIDTH
|
||
LD C,Dss.Read
|
||
RST ToDSS
|
||
DI
|
||
JP C,Program_exit.file
|
||
AND A
|
||
JP NZ,Program_exit.file
|
||
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
POP AF
|
||
OUT (PORT_Y),A
|
||
|
||
LD HL,.pic_buffer
|
||
LD DE,#4000+Screen_Offset+MAIN_PICTURE.PIC_X
|
||
;
|
||
IF MAIN_PICTURE.PIC_WIDTH < 256
|
||
ACC_CopyBlock
|
||
LD C,(HL)
|
||
LD (DE),A
|
||
ACC_Off
|
||
ELSE
|
||
LD BC,MAIN_PICTURE.PIC_WIDTH
|
||
LDIR
|
||
ENDIF
|
||
;
|
||
LD H,A
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
PUSH AF
|
||
|
||
LD A,H
|
||
DEC A
|
||
CP MAIN_PICTURE.PIC_Y-1
|
||
JR NZ,.loop_pic
|
||
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
IM 1
|
||
EI
|
||
RET
|
||
.pic_buffer: BLOCK MAIN_PICTURE.PIC_WIDTH,0
|
||
|
||
ROM_PIC:
|
||
._39SF020:
|
||
LD HL,PICTURE.bdRaster+MAIN_PICTURE.CHIP_FIRST_X ;!!!!! MAIN_PICTURE.CHIP_PIC_WIDTH - MAIN_PICTURE.CHIP_WIDTH
|
||
JR .show
|
||
._29EE020:
|
||
LD HL,PICTURE.bdRaster+MAIN_PICTURE.CHIP_SECOND_X ;!!!!!
|
||
.show:
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
|
||
LD A,MAIN_PICTURE.CHIP_PIC_Y ; !!!!! ®â®á¨âáï ª ª à⨪¥
|
||
|
||
.loop: OUT (PORT_Y),A
|
||
LD DE,#4000+Screen_Offset+MAIN_PICTURE.CHIP_PIC_X ; !HARDCODE
|
||
LD BC,MAIN_PICTURE.CHIP_WIDTH ; !HARDCODE
|
||
LDIR
|
||
LD BC,MAIN_PICTURE.CHIP_X ;160-76 ;!!!!!
|
||
ADD HL,BC
|
||
DEC A
|
||
CP MAIN_PICTURE.CHIP_PIC_Y-MAIN_PICTURE.CHIP_HEIGHT+1 ;PLACE_ID-16 ;!!!!!
|
||
JR NZ,.loop
|
||
|
||
SAFE_PORTY
|
||
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
|
||
RET
|
||
;-----------------------------------------------------------------------
|
||
DrawProgress:
|
||
.Erase EQU 0
|
||
.Write EQU 1
|
||
.Verify EQU 2
|
||
;
|
||
.start: PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
LD (.CURRENT_BAR),A
|
||
;
|
||
LD D,PROGRESS_BAR.ERASE
|
||
LD HL,#4000+Screen_Offset+PROGRESS_BAR.ERASE_START_X
|
||
OR A ;CP .Erase
|
||
JR Z,.set
|
||
;
|
||
LD D,PROGRESS_BAR.WRITE
|
||
LD HL,#4000+Screen_Offset+PROGRESS_BAR.WRITE_START_X
|
||
CP .Write
|
||
JR Z,.set
|
||
;
|
||
LD HL,#4000+Screen_Offset+PROGRESS_BAR.VERIFY_START_X
|
||
LD D,PROGRESS_BAR.VERIFY
|
||
;
|
||
.set: LD A,D
|
||
LD (.LINE_PROG),A
|
||
LD (.PROGRESS_ST),HL
|
||
;
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
LD A,(.LINE_PROG)
|
||
OUT (PORT_Y),A
|
||
;
|
||
;LD DE,#4000+Screen_Offset+PROGRESS_BAR.START_X+1
|
||
PUSH HL
|
||
POP DE
|
||
INC DE
|
||
LD BC,PROGRESS_BAR.PIXELS-1
|
||
LD (HL),PROGRESS_BAR.EMPTY_COLOR
|
||
LDIR
|
||
;
|
||
SAFE_PORTY
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
POP BC
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
|
||
.next: PUSH HL
|
||
PUSH AF
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
;
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
LD A,(.LINE_PROG)
|
||
OUT (PORT_Y),A
|
||
;
|
||
LD HL,(.PROGRESS_ST)
|
||
LD (HL),PROGRESS_BAR.COLOR
|
||
INC HL ; !TODO ᤥ« âì âã⠯஢¥àªã ¢ë室 § £à ¨æë
|
||
LD (.PROGRESS_ST),HL
|
||
SAFE_PORTY
|
||
;
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
POP AF
|
||
POP HL
|
||
RET
|
||
|
||
.done: PUSH BC
|
||
PUSH HL
|
||
PUSH AF
|
||
IN A,(SLOT1)
|
||
PUSH AF
|
||
;
|
||
LD A,#50
|
||
OUT (SLOT1),A
|
||
LD A,(.LINE_PROG)
|
||
OUT (PORT_Y),A
|
||
LD A,(.CURRENT_BAR)
|
||
;
|
||
LD BC,#4000+Screen_Offset+PROGRESS_BAR.ERASE_START_X
|
||
OR A ;CP .Erase
|
||
JR Z,.sub
|
||
LD BC,#4000+Screen_Offset+PROGRESS_BAR.WRITE_START_X
|
||
CP .Write
|
||
JR Z,.sub
|
||
LD BC,#4000+Screen_Offset+PROGRESS_BAR.VERIFY_START_X
|
||
;
|
||
.sub: LD HL,(.PROGRESS_ST)
|
||
XOR A
|
||
SBC HL,BC
|
||
LD A,PROGRESS_BAR.PIXELS
|
||
SUB L
|
||
JR Z,.exit
|
||
JR C,.exit
|
||
LD B,A
|
||
LD HL,(.PROGRESS_ST)
|
||
;
|
||
.loop: LD (HL),PROGRESS_BAR.COLOR
|
||
INC HL
|
||
DJNZ .loop
|
||
;
|
||
.exit: SAFE_PORTY
|
||
POP AF
|
||
OUT (SLOT1),A
|
||
POP AF
|
||
POP HL
|
||
POP BC
|
||
RET
|
||
;
|
||
.LINE_PROG: BYTE 45
|
||
.PROGRESS_ST: WORD 0
|
||
.CURRENT_BAR: BYTE 0
|
||
;-----------------------------------------------------------------------
|
||
;
|
||
|
||
;
|
||
;=======================================
|
||
FILE_HANDLE: DB 0
|
||
;=======================================
|
||
;
|
||
|
||
;
|
||
VideoModes:
|
||
.text_mode80x32:
|
||
DB 40
|
||
DB 32
|
||
DB 0
|
||
DB 0
|
||
DB %00011011
|
||
DB 0
|
||
DB 0
|
||
DB 0
|
||
.graf_mode320x256:
|
||
DB 80
|
||
DB 32
|
||
DB 0
|
||
DB 0
|
||
DB %01100000
|
||
DB 0
|
||
DB 0
|
||
DB 0
|
||
;
|
||
|
||
SAVE_DCP_PORT:
|
||
.write: BYTE 0
|
||
.read: BYTE 0
|
||
;.temp: WORD 0
|
||
|
||
;
|
||
; IF _dIs_Updater
|
||
altera_chip: BYTE 0
|
||
CHECKSUMS:
|
||
;.BIOS_K30: DWORD LUA_CHECKSUM_K30_BIOS
|
||
.BIOS: DWORD LUA_CHECKSUM_BIOS
|
||
.K30: DWORD LUA_CHECKSUM_K30
|
||
.K50: DWORD LUA_CHECKSUM_K50
|
||
.LOADER: DWORD LUA_CHECKSUM_LOADER
|
||
|
||
ONLY_BIOS: BYTE 0
|
||
|
||
OFFSETS:
|
||
.LOADER: DWORD IMAGES.K30 - exe_header
|
||
.K30: DWORD IMAGES.K30 - exe_header
|
||
.K50: DWORD IMAGES.K50 - exe_header
|
||
.BIOS: DWORD IMAGES.BIOS - exe_header
|
||
.PICTURE_2 DWORD PICTURE_2 - exe_header
|
||
|
||
|
||
TEST_ROM_CHIP:
|
||
LD B,10
|
||
.loop: PUSH BC
|
||
SCF ;no draw progress
|
||
CALL READ_ID_ROM.no_draw
|
||
EX DE,HL
|
||
;
|
||
LD HL,ROM_CHIP.SST39SF020A
|
||
AND A
|
||
SBC HL,DE
|
||
LD BC,SST39SF020
|
||
JR Z,.detected
|
||
;
|
||
LD HL,#76BF ; !HARDCODE
|
||
AND A
|
||
SBC HL,DE
|
||
;LD BC,SST39SF020
|
||
JR Z,.detected
|
||
;
|
||
LD HL,#10BF ; !HARDCODE
|
||
AND A
|
||
SBC HL,DE
|
||
;LD BC,SST39SF020
|
||
JR Z,.detected
|
||
;
|
||
LD HL,#24BF ; !HARDCODE
|
||
AND A
|
||
SBC HL,DE
|
||
;LD BC,SST39SF020
|
||
JR Z,.detected
|
||
;
|
||
LD HL,#45DA ; !HARDCODE
|
||
AND A
|
||
SBC HL,DE
|
||
LD BC,W29C020
|
||
JR Z,.detected
|
||
;
|
||
POP BC
|
||
DJNZ .loop
|
||
LD BC,ITs_Unknown_Chip ; ¢¤à㣠¡ã¤ã 祣® ¯¥à¥¤¥«ë¢ âì ¨ § ¡ã¤ã
|
||
SCF
|
||
RET
|
||
.detected:
|
||
POP HL ; ᨬ ¥¬ «¨è¥¥
|
||
RET
|
||
|
||
MODULE SET_ROM_MODE
|
||
; ¢ë室: HL - ¯à¥¤ë¤ã騩 ®¬¥à ¢ãâ॥£® ¯®àâ ¤«ï ã«¥¢®£® ¢¥è¥£® ¨§ DCP
|
||
Flash: DI
|
||
; Setup Z84
|
||
;!TODO ¤®¡ ¢¨âì ¢í©âë ¤«ï <20>‡“?
|
||
;
|
||
;
|
||
; Enable ROM boundaries
|
||
LD BC,#FF*256+Z84.SYS.Control
|
||
LD A,Z84.REG.Misc_Ctrl ; 3-rd register for setup boundaries
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C
|
||
LD A,1 ; cs0 enable, cs1 disable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two
|
||
OUT (C),A ; Z84.SYS.Data
|
||
DEC C
|
||
LD A,Z84.REG.CS_Boundary
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C
|
||
LD A,#F3 ; boundaries rom = 0000.3fff
|
||
OUT (C),A ; Z84.SYS.Data
|
||
; ; ¡®à¤îà ¯®àâ¨âáï ¯à¨ § ¯¨á¨ ¢ ¯®àâ ¯à®æ #EE ¨§-§ ¤¥è¨äà æ¨¨ ª àâë ¯®à⮢
|
||
XOR A
|
||
OUT (BorderColor),A
|
||
; SET ROM_RG Port
|
||
LD BC,ACEX.ROM_RG*256+ACEX.ROM_RG
|
||
CALL SET_DCP_PORT
|
||
PUSH HL
|
||
; SET ROM PAGE 8
|
||
LD A,SYS_PORT.CNF_0
|
||
OUT (SYS_PORT.ON),A
|
||
;
|
||
LD BC,#1FFD
|
||
XOR A
|
||
OUT (C),A
|
||
;!TODO ¢®§¬®¦®, çâ® íâ® ¤«ï Sp97
|
||
LD A,#FF
|
||
OUT (SLOT0),A
|
||
LD A,#FE
|
||
LD I,A ; ã¡à âì «¨è¨¥ ®¡à 饨ï...
|
||
;
|
||
POP HL
|
||
RET
|
||
Normal: DI
|
||
; Setup Z84
|
||
; Set ROM BIOS
|
||
XOR A
|
||
LD BC,0
|
||
OUT (C),A
|
||
; ¨¨æ¨ «¨§ æ¨ï á¨á⥬ëå ¯®à⮢ Z84C15
|
||
LD BC,#FF*256+Z84.SYS.Control
|
||
XOR A ; Z84.REG.WaitState_Ctrl
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C ; Z84.REG.WaitState_MemBound
|
||
OUT (C),A ; Z84.SYS.Data ; set 0 Waits
|
||
DEC C
|
||
LD A,Z84.REG.Misc_Ctrl
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C
|
||
XOR A ; disable CS0, disable CS1
|
||
OUT (C),A ; Z84.SYS.Data
|
||
; ; ¡®à¤îà ¯®àâ¨âáï ¯à¨ § ¯¨á¨ ¢ ¯®àâ ¯à®æ #EE ¨§-§ ¤¥è¨äà æ¨¨ ª àâë ¯®à⮢
|
||
XOR A
|
||
OUT (BorderColor),A
|
||
; SET ROM PAGE 8
|
||
LD A,SYS_PORT.CNF_0
|
||
OUT (SYS_PORT.RAM),A
|
||
;
|
||
LD BC,#1FFD
|
||
LD A,1
|
||
OUT (C),A
|
||
;!TODO ¢®§¬®¦®, çâ® íâ® ¤«ï Sp97
|
||
.slot0+1: LD A,0
|
||
OUT (SLOT0),A
|
||
.int_vector+1: LD A,0
|
||
LD I,A
|
||
; RESET ROM_RG Port
|
||
LD BC,(SAVE_DCP_PORT)
|
||
CALL SET_DCP_PORT
|
||
RET
|
||
ENDMODULE
|
||
|
||
IF _dLogingMode
|
||
;‚•Ž„: H - ¯¥à¢ë© 梥⠡®à¤îà
|
||
; L - ¢â®à®© 梥⠡®à¤îà
|
||
; Œ¨£ ¥â ¤¢ã¬ï 梥⠬¨ ¡®à¤îॠ¤® ¦ â¨ï ª« ¢¨èã
|
||
BORDER_FLASH: LD A,H
|
||
OUT (BorderColor),A
|
||
CALL Pause._200msek
|
||
CALL .key
|
||
;
|
||
LD A,L
|
||
OUT (BorderColor),A
|
||
CALL Pause._200msek
|
||
CALL .key
|
||
JR BORDER_FLASH
|
||
;
|
||
.key: XOR A
|
||
IN A,(ZXKeys)
|
||
AND %0001'1111
|
||
XOR %0001'1111
|
||
RET Z
|
||
;
|
||
LD A,COLORS.CGA.BORDER.BLACK
|
||
OUT (BorderColor),A
|
||
POP HL
|
||
RET
|
||
ENDIF
|
||
|
||
; ENDIF
|
||
|
||
/*
|
||
DB "End of program."
|
||
;
|
||
BLOCK #8E00-$,0
|
||
cmos_data:
|
||
|
||
BLOCK data_start-$-#66,0
|
||
stack_prog:
|
||
*/
|
||
; BLOCK data_start-$,0
|
||
|
||
|
||
BLOCK stack_size,0
|
||
stack_point EQU $-2
|
||
|
||
PICTURE TBitMapFileHeader = $
|
||
DISPLAY "incbin length: ",/D,MAIN_PICTURE.PIC_OFFSET+MAIN_PICTURE.CHIP_NAME_OFFSET
|
||
|
||
INCBIN PICTURE_FILE,0,MAIN_PICTURE.PIC_OFFSET+MAIN_PICTURE.CHIP_NAME_OFFSET
|
||
|
||
ASSERT $ < #10000," Error: EXE-loader too big! "
|
||
|
||
; IF _dIs_Updater
|
||
Loader_length EQU $-Flasher_Start
|
||
DISPLAY "Loader_length: ",/A,Loader_length
|
||
|
||
;=======================================
|
||
; IF _dDEBUG
|
||
; OUTEND
|
||
; DEVICE NONE
|
||
; ENDIF
|
||
;=======================================
|
||
DISPLAY PICTURE_FILE,' ',/A,MAIN_PICTURE.PIC_OFFSET+MAIN_PICTURE.CHIP_NAME_OFFSET
|
||
|
||
OUTPUT '../SP_Core/Build/updater_picture.bin'
|
||
PICTURE_2: INCBIN PICTURE_FILE,MAIN_PICTURE.PIC_OFFSET + MAIN_PICTURE.CHIP_NAME_OFFSET;+MAIN_PICTURE.PIC_WIDTH ; ;!!!!!
|
||
.length EQU $ - PICTURE_2
|
||
OUTEND
|
||
IMAGES:
|
||
.BIOS: INCBIN BIOS_K30_FILE,0,#4000 * #0C ; ®¡à § BIOS
|
||
.K30: INCBIN BIOS_K30_FILE,#4000 * #0C,#10000 ; ¡¨âáâਬ ¤«ï K30 á § £àã§ç¨ª®¬
|
||
.K50: INCBIN K50_FILE,0,#10000 ; ¡¨âáâਬ ¤«ï K50 á § £àã§ç¨ª®¬
|
||
.end EQU $
|
||
; ELSE
|
||
; Loader_length EQU 0
|
||
; ENDIF
|
||
|
||
; IF _dIs_Updater
|
||
DISPLAY "Image reolution: ",/D,MAIN_PICTURE.PIC_WIDTH,"x",/D,MAIN_PICTURE.PIC_HEIGHT," pixels. Size: ",/D,MAIN_PICTURE.PIC_SIZE," bytes."
|
||
DISPLAY "Code ends: ",/A,PICTURE
|
||
DISPLAY "Code Length: ",/A,PICTURE-Flasher_Start
|
||
DISPLAY "Loader ends: ",/A,Loader_length+Flasher_Start
|
||
DISPLAY "Loader Length: ",/A,Loader_length
|
||
|
||
DISPLAY "IMAGES.K30 Starts: ",/A,IMAGES.BIOS
|
||
DISPLAY "IMAGES.K30 Ends: ",/A,IMAGES.K50
|
||
DISPLAY "IMAGES.K30 Length: ",/A,IMAGES.K50-IMAGES.BIOS
|
||
|
||
DISPLAY "IMAGES.K50 Starts: ",/A,IMAGES.K50
|
||
DISPLAY "IMAGES.K50 Ends: ",/A,IMAGES.end
|
||
DISPLAY "IMAGES.K50 Length: ",/A,IMAGES.end-IMAGES
|
||
|
||
DISPLAY "PIC_Y: ",/H,MAIN_PICTURE.PIC_Y
|
||
DISPLAY "PIC_HEIGHT: ",/H,MAIN_PICTURE.PIC_HEIGHT
|
||
DISPLAY "CHIP_HEIGHT: ",/H,MAIN_PICTURE.CHIP_HEIGHT
|
||
IF _dDEBUG|_dLogingMode
|
||
DISPLAY "\nWARNING! Debug version!!! WARNING! Debug version!!! WARNING! Debug version!!!\n"
|
||
ENDIF
|
||
|
||
|
||
EXPORT BoardNumOffsets.Start
|
||
EXPORT BoardNumOffsets.Number
|
||
EXPORT BoardNumOffsets.End
|
||
EXPORT BoardNumOffsets.Type
|
||
EXPORT expBIOS_Vars.msgStrings.str_ACEX_MODEL
|
||
EXPORT expBIOS_Vars.msgRusStrings.str_ACEX_MODEL
|
||
EXPORT PICTURE.bdPallete
|
||
EXPORT TEST_ROM_CHIP
|
||
EXPORT TST_R.jp
|
||
EXPORT MAIN_PICTURE.PIC_X
|
||
EXPORT MAIN_PICTURE.PIC_Y
|
||
EXPORT MAIN_PICTURE.PIC_WIDTH
|
||
EXPORT Screen_Offset
|
||
|
||
; ENDIF
|
||
; END
|
||
;******************************************************
|
||
|
||
/*
|
||
;
|
||
LD BC,#FFEE
|
||
XOR A
|
||
OUT (C),A ; 0 register - waits
|
||
INC C
|
||
OUT (C),A ; set 0 Waits
|
||
|
||
DEC C
|
||
LD A,3 ; 3-rd - Misc.Control Register
|
||
OUT (C),A
|
||
INC C
|
||
|
||
XOR A
|
||
LD A,1
|
||
|
||
OUT (C),A ; disable CS0,CS1
|
||
; no boundary set!
|
||
|
||
LD BC,#7FFD
|
||
LD A,#10
|
||
OUT (C),A ; BASIC_48 mode
|
||
LD B,#1F
|
||
LD A,01
|
||
OUT (C),A ; RAM-0 mode !!!
|
||
|
||
; out (slot3),saved_page
|
||
|
||
*/
|
||
|
||
|
||
/*
|
||
PRINT_LINE: ; from HL, zero - end
|
||
|
||
IN A,(SLOT1)
|
||
EX AF,AF'
|
||
LD A,50h
|
||
OUT (SLOT1),A
|
||
LD A,01h ; first place
|
||
OUT (PORT_Y),A
|
||
|
||
LD A,(VARX)
|
||
AND A
|
||
JR NZ,NO_VARS
|
||
LD A,(4300h)
|
||
LD A,C
|
||
LD (VARX),A
|
||
NO_VARS:
|
||
LD C,A
|
||
|
||
LD DE,04301h ; symbol place
|
||
PRINT_LOOP:
|
||
LD A,(HL)
|
||
AND A
|
||
JR Z,PRINT_END
|
||
|
||
LD (DE),A ; symbol
|
||
DEC E
|
||
LD A,C
|
||
LD (DE),A ; MODE
|
||
INC E
|
||
INC E
|
||
LD A,07h ; color
|
||
LD (DE),A
|
||
DEC E
|
||
|
||
INC HL
|
||
IN A,(PORT_Y)
|
||
INC A
|
||
OUT (PORT_Y),A
|
||
JR PRINT_LOOP
|
||
|
||
LD BC,(4300h)
|
||
PRINT_END:
|
||
LD A,#C0 ; close
|
||
OUT (PORT_Y),A
|
||
EX AF,AF'
|
||
OUT (SLOT1),A
|
||
|
||
RET
|
||
|
||
VARX: DB 0
|
||
*/
|
||
;
|