This commit is contained in:
Tolik 2024-07-29 03:53:45 +10:00
parent ace6b0904b
commit 9f19a04da6
15 changed files with 1649 additions and 1817 deletions

115
Crazy BIOS/Info.txt Normal file
View File

@ -0,0 +1,115 @@
; § ¬ ¯«¥­ ç¥à¥§ ª àâã ¯®à⮢ ­  #7C/#3C ¨ #74/#24
CNF_PORT:
.ON EQU #74
.OFF EQU #24
; Data:
.TURBO.ON EQU 3 ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
.TURBO.OFF EQU 2 ; ¤ ­­ë¥ ¤«ï ¢ëª«î祭¨ï TURBO
.CNF_0 EQU #04 ; ª àâ  ¯®à⮢ 0
.CNF_1 EQU #0C ; ª àâ  ¯®à⮢ 1 (¤«ï ०¨¬  ¯®ç⨠ç¨á⮣® zx spectrum)
.CNF_2 EQU #14 ; ª àâ  ¯®à⮢ 2
.CNF_3 EQU #1C ; ª àâ  ¯®à⮢ 3 (०¨¬ ¤®áâ㯠 ª ¯®àâ ¬ ƒ93 ¡¥§ ᨣ­ «  TR-DOS)
.PENT_RESET EQU #20
.SCORP_RESET EQU #40
.CNF_512 EQU #80 ; ¢ª«î祭¨¥ Pentagon 128
.ZX_BIOS EQU #00
.ZX_EXTENSION EQU #01
; ¯à¨¡¨â ¢ ª®­ä¥ £¢®§¤ï¬¨ ­  #7C/#3C
SYS_PORT:
.ON EQU #7C
.OFF EQU #3C
.RAM EQU .OFF
.ROM EQU .ON
; Data:
.PAGE0 EQU 1
.PAGE8 EQU 0
.EXTENSION EQU .PAGE0
.BIOS EQU .PAGE8
.TURBO.ON EQU CNF_PORT.TURBO.ON
.TURBO.OFF EQU CNF_PORT.TURBO.OFF
.CNF_0 EQU CNF_PORT.CNF_0
.CNF_1 EQU CNF_PORT.CNF_1
.CNF_2 EQU CNF_PORT.CNF_2
.CNF_3 EQU CNF_PORT.CNF_3
.PENT_RESET EQU CNF_PORT.PENT_RESET
.SCORP_RESET EQU CNF_PORT.SCORP_RESET
.CNF_512 EQU CNF_PORT.CNF_512
/*
---------------------------------------------------
CNF_PORT ¢¨á¨â ­  4 ¢­¥è­¨å ¯®àâ å (#7C/#3C ¨ #74/#24) ç¥à¥§ ª àâã ¯®à⮢.
SYS_PORT £¢®§¤ï¬¨ ¢ ª®­ä¥ ­  #7C/#C
SYS_PORT ⮫쪮 ¯¥à¥ª«îç ¥â RAM/ROM
CNF_PORT ¬¥­ï¥â ¢áñ ®áâ «ì­®¥, ¯à¨ ¡¨â1=0 ¬¥­ïîâáï áâà ­¨æë í¬ã«ïâ®à  <20>‡“ ç¥à¥§ ¡¨â0
CNF_PORT
bit0 - TURBO: off/on ¨«¨ vROM:
; #24 - áâà ­¨æ  ¨§ ¢­.¯®àâ  (#E0..#E3)/(#E4..#E7)
; #74 - áâà ­¨æ  ¨§ ¢­.¯®àâ  #EB/#EF
bit1 - 1 - TURBO ena, 0 - ¯¥à¥ª«î祭¨¥ vROM page
bit2 - 1 - CNF ena
bit3 - \_ cnf0..cnf3 -\
bit4 - / - \
bit5 - CNF_PN[5..0]_RESET by 1 - á¡à®á <20>¥­â. ¯®àâ  - -|---> ¤¥©áâ¢ãîâ ⮫쪮 ¯à¨ bit2=1
bit6 - CNF_SC_RESET by 1 - á¡à®á ‘ª®à¯. ¯®àâ  - /
bit7 - CNF_PN[7..6]_RESET by 0 - á¡à®á <20>¥­â-512 -/
<20>¥à¥ª«î祭¨¥ áâà ­¨æ vROM:
____________________________________________________
| ‡­ ç¥­¨¥ | ‡ ¯¨áì ¢® ¢­¥è­¨© ¯®àâ: |
| ¨§ ¢­ãâà. |____________________________________|
| ¯®àâ  | #24 ---- | | | |
| €«ìâ¥àë | #3C (-rom) | | | |
| ||| | #7C (+rom) | #74 | 1FFD | 7FFD |
| \|/ | bit1..0 | bit1..0 | bit1 | bit4 |
|_____________|____________|_________|______|______|
|E0 | 00 | | 1 | ... |
|E1 (+dos_on) | 00 | | 0 | ... |
|E2 | 00 | | 0 | 0 |
|E3 | 00 | | 0 | 1 |
|E4 | 01 | | 1 | ... |
|E5 (+dos_on) | 01 | | 0 | ... |
|E6 | 01 | | 0 | 0 |
|E7 | 01 | | 0 | 1 |
|EB | | 00 | ... | ... | BIOS
|EF | | 01 | ... | ... | EXTENSION
|_____________|____________|_________|______|______|
... - §­ ç¥­¨¥ ஫¨ ­¥ ¨£à ¥â
‘â ­¤ àâ­ë¥ áâà ­¨æë އ“ ¤«ï ®¡à §®¢ <20>‡“ ᯥªâà㬠:
Page Name Int.Port Page Name Int.Port
#42 BASIC 128 #E2 | ??? ??? ??? ??? #E6
#43 BASIC 48 #E3 | ??? ??? ??? ??? #E7
#44 TR-DOS #E1 | ??? ??? ??? ??? #E5
#45 BIOS (ZX_EXP) #E0 | ??? ??? ??? ??? #E4
#46 BIOS (ZX_EXP) #EB
#47 BIOS (ZX_EXP2) #EF
SYS_PORT:
bit0 - TURBO: on/off ¨«¨ BIOS: Part1/Part0
bit1 - 1 - TURBO ena, 0 - ¯¥à¥ª«î祭¨¥ BIOS-PAGE
bit2 - 1 - CNF ena
bit3 - \_ cnf0..cnf3 -\
bit4 - / - \
bit5 - CNF_PN[5..0]_RESET by 1 - á¡à®á <20>¥­â. ¯®àâ  - -|---> ¤¥©áâ¢ãîâ ⮫쪮 ¯à¨ bit2=1
bit6 - CNF_SC_RESET by 1 - á¡à®á ‘ª®à¯. ¯®àâ  - /
bit7 - CNF_PN[7..6]_RESET by 0 - á¡à®á <20>¥­â-512 -/
”ã­ªæ¨ï bit0 ®¯à¥¤¥«ï¥âáï ç¥à¥§ bit1
bit7..bit3 áà ¡ â뢠î⠯ਠbit2 = 1
‡ ¯¨áì ¢ ¯®àâ #7C ¯®¤ª«îç ¥â <20>‡“ ¢ ®ª­® 0, § ¯¨áì ¢ ¯®àâ #3C ®âª«îç ¥â
<EFBFBD>‡“ ®â ®ª­  0, ¯®í⮬㠯®àâ 7/3C ­ §ë¢ ¥âáï System/User.
<EFBFBD>¥à¥ª«î祭¨¥ áâà ­¨æ <20>‡“ à ¡®â ¥â ¢ í⮬ ¢ à¨ ­â¥ â ª:
¢ <20>‡“ 16 áâà ­¨æ ®â 0 ¤® 15, ¯®àâ #5C ¨å ¯¥à¥ª«îç ¥â á bit3 xor /SYS (SYS_PORT bit[1..0] = b"0X" (BIOS: Part1/Part0))
¥á«¨ ᤥ« âì ld a,1 : out (sys_port_on),a - â® ­ã¬¥à æ¨ï áâà ­¨æ <20>‡“ ¡ã¤¥â ¯à ¢¨«ì­ ï ®â 0 ¤® 15,
¥á«¨ ᤥ« âì ld a,0 : out (sys_port_on),a - â® ­ã¬¥à æ¨ï áâà ­¨æ <20>‡“ ¡ã¤¥â á ¨­¢¥àâ¨à®¢ ­­ë¬ bit3:
áâà ­¨æë <20>‡“ 0-7 ¡ã¤ã⠭㬥஢ âìáï ª ª 8-15
áâà ­¨æë <20>‡“ 8-15 ¡ã¤ã⠭㬥஢ âìáï ª ª 0-7
¯¥à¥ª«î祭¨¥ áâà ­¨æ <20>‡“ ¯®à⮬ #5C ¯à®¨á室¨â ⮫쪮 ¯à¨ ¢®âª­ã⮩ <20>‡“ ç¥à¥§ sys_port.
Œ®¦­® ¯¥à¥ª«îç âì áâà ­¨æë ç¥à¥§ ¢­ãâ७­¨© ¯®àâ #8F, ⮣¤  bit4 í⮣® ¯®àâ  ¢ª«îç ¥â ᨣ­ « § ¯¨á¨ ¤«ï <20>‡“.
’ ª ¦¥ íâ®â ¯®àâ ¤ ñâ ¯àï¬ãî ­ã¬¥à æ¨î áâà ­¨æ ¯à¨ ãáâ ­®¢«¥­­®¬ bit4.
----------------------------------------------------
ROM.SLOT0

View File

@ -625,7 +625,7 @@ SET_PORTS:
OUT (C),A OUT (C),A
LD A,(SYS_PAGE.CONFIG_DE-#4000) LD A,(SYS_PAGE.CONFIG_DE-#4000)
OUT (C),D ; ¢¥à­ãâì áâà ­¨æã OUT (C),D ; ¢¥à­ãâì áâà ­¨æã
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ROM),A
; ;
CALL DOS_OFF CALL DOS_OFF
; ;
@ -648,7 +648,7 @@ SET_PORTS:
CALL DOS_ON CALL DOS_ON
; ;
LD A,CNF_PORT.CNF_0 + ROM.BIOS LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ROM),A
; ;
LD C,SLOT2 ; ¯®«ãç¨âì áâà ­¨æã LD C,SLOT2 ; ¯®«ãç¨âì áâà ­¨æã
IN D,(C) IN D,(C)

View File

@ -35,7 +35,7 @@ BOARD_INFO:
EXP_FNS_2_RET: EXP_FNS_2_RET:
PUSH AF PUSH AF
LD A,ROM.BIOS LD A,ROM.BIOS
OUT (SYS_PORT.RAM),A OUT (CNF_PORT.ON),A
POP AF POP AF
JR RST_18_1 JR RST_18_1
;======================================= ;=======================================
@ -979,7 +979,7 @@ PrepareToZX: ; Setup HDD drives for ZX Spectrum mode
PORTS_INIT: PORTS_INIT:
; ¢ª«îç¨âì TURBO ; ¢ª«îç¨âì TURBO
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ON),A
; ; RESET to ISA ; ; RESET to ISA
; LD BC,PORT_ISA ; LD BC,PORT_ISA
; LD A,#FF ; LD A,#FF
@ -1081,7 +1081,7 @@ PORTS_INIT:
; ‘¡à®á ª®­â஫«¥à  ¤¨áª®¢®¤  ; ‘¡à®á ª®­â஫«¥à  ¤¨áª®¢®¤ 
; ‚ª«îç¨âì ¤®áâ㯠ª ª®­â஫«¥àã ¤¨áª  (âà¥âìï ª®­ä ) ; ‚ª«îç¨âì ¤®áâ㯠ª ª®­â஫«¥àã ¤¨áª  (âà¥âìï ª®­ä )
LD A,CNF_PORT.CNF_3 + ROM.BIOS LD A,CNF_PORT.CNF_3 + ROM.BIOS
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ON),A
OUT (FDC_93.DrvCTRL),A OUT (FDC_93.DrvCTRL),A
push hl push hl
pop hl pop hl

View File

@ -594,14 +594,14 @@ WR_SEC: LD D,5 ;RETRY COUNT
SET_DOS_ON: SET_DOS_ON:
EX AF,AF' EX AF,AF'
LD A,CNF_PORT.CNF_3 + ROM.BIOS LD A,CNF_PORT.CNF_3 + ROM.BIOS
OUT (SYS_PORT.ROM),A ; - OPEN OUT (CNF_PORT.ROM),A ; - OPEN
EX AF,AF' EX AF,AF'
RET RET
; ‚àã¡ ¥â ­ã«¥¢ãî ª àâã ¯®à⮢ ; ‚àã¡ ¥â ­ã«¥¢ãî ª àâã ¯®à⮢
SET_DOS_OFF: SET_DOS_OFF:
EX AF,AF' EX AF,AF'
LD A,CNF_PORT.CNF_0 + ROM.BIOS LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A ; - CLOSE OUT (CNF_PORT.ROM),A ; - CLOSE
EX AF,AF' EX AF,AF'
RET RET

View File

@ -802,7 +802,7 @@ ROM_DISK:
LD B,A LD B,A
XOR A XOR A
OUT (ROM.SLOT0),A OUT (ROM.SLOT0),A
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ON),A
LD A,B LD A,B
JP .readNext JP .readNext
.stackDepth EQU 8 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ . .stackDepth EQU 8 ; à ááâ®ï­¨¥ ®â ª®­æ  ¯à®æ¥¤ãàë ¤® ¢¥à設ë á⥪ .

View File

@ -141,7 +141,7 @@ RST_CONF:
DI DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢ ; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A OUT (CNF_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â ; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF PUSH AF
@ -223,7 +223,7 @@ RST_CONF:
DI DI
; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢ ; ãáâ ­ ¢«¨¢ ¥¬ ­ã«¥¢ãî ª àâã ¯®à⮢
LD A,CNF_PORT.CNF_0 LD A,CNF_PORT.CNF_0
OUT (SYS_PORT.ON),A OUT (CNF_PORT.ON),A
; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â ; ¨ â ª ¯®­ïâ­® çâ® ¤¥« ¥â
IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë IN A,(SLOT3) ; á®å࠭塞 ­®¬¥à ¢®âª­ã⮩ áâà ­¨æë
PUSH AF PUSH AF

View File

@ -349,7 +349,7 @@ FN_TURBO:
LD (SYS_PAGE.CONFIG_DE),A LD (SYS_PAGE.CONFIG_DE),A
AND 3 AND 3
; ;
OUT (SYS_PORT.ROM),A OUT (CNF_PORT.ROM),A
LD A,B LD A,B
OUT (SLOT3),A OUT (SLOT3),A
AND A AND A

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +0,0 @@
Sprites:
; <20>  ¢å®¤¥ ¢ IX  ¤à¥á â ¡«¨æë á ¢ë¢®¤¨¬ë¬¨ á¯à ©â ¬¨
IN A,(SLOT1)
LD H,A
IN A,(PORT_Y)
LD L,A
PUSH HL
LD A,#58
OUT (SLOT1),A
; ld ix,SP_Table
ld b,(ix+0)
inc ix
.loop:
push bc
LD A,(ix+str_EasterSprites.SpHeight) ; !!!!! ª®®à¤¨­ â  ª à⨭ª¨ ¯® Y + ¢ëá®â  ª à⨭ª¨
ld l,(ix+str_EasterSprites.SpAddress)
ld h,(ix+str_EasterSprites.SpAddress+1)
.putSprite:
DEC A
OUT (PORT_Y),A
LD E,(ix+str_EasterSprites.SpXCoord) ; !HARDCODE ª®®à¤¨­ â  ª à⨭ª¨ ¯® •
LD D,(ix+str_EasterSprites.SpXCoord+1)
LD C,(ix+str_EasterSprites.SpWidth) ; !HARDCODE ¤«¨­  £®à¨§®­â «ì­®© «¨­¨¨ ª à⨭ª¨
LD B,(ix+str_EasterSprites.SpWidth+1)
LDIR
CP (IX+str_EasterSprites.SpYCoord)
JP NZ,.putSprite
ld c,str_EasterSprites
add ix,bc
pop bc
djnz .loop
POP BC
LD A,B
OUT (SLOT1),A
LD A,C
OUT (PORT_Y),A
XOR A
RET

View File

@ -1,157 +0,0 @@
;------------------------------------------------------------------------------
;hl=src de=dst
lz4decrunch:
ld bc,7
add hl,bc
ld c,(hl)
inc hl
ld b,(hl) ;„q„u„„v„} „t„r„p „q„p„z„„„p „y„x „x„p„s„€„|„€„r„{„p - „„p„x„}„u„
inc hl
inc hl
inc hl ;„~„p„‰„p„|„€ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡ „ƒ„€ „ƒ„}„u„„u„~„y„ #0B
ld a,l
add a,c
ld (.endL+1),a
ld a,h
adc a,b
ld (.endH+1),a ;„K„€„~„u„‰„~„<>„z „p„t„„u„ƒ „ƒ„w„p„„„<E2809E>„‡ „t„p„~„~„<>„‡
.loop:
ld a,(hl)
inc hl
ld (.litteral+1),a
and #F0
jr z,.copy ;„E„ƒ„|„y „t„|„y„~„p „„p„r„~„p 0, „ƒ„{„€„<E282AC>„y„„€„r„p„„„Ž „…„w„u „<>„u„„u„t„p„~„~„<>„u „t„p„~„~„<>„u
rrca
rrca
rrca
rrca
ld b,0
ld c,a
cp #0F
call z,.getlength ;„E„ƒ„|„y „t„|„y„~„p #0F, „„„€ „<>„€„|„…„‰„y„„„Ž „t„€„<E282AC>„€„|„~„y„„„u„|„Ž„~„…„<E280A6> „t„|„y„~„…
ldir ;„P„u„„u„t„p„‰„p „~„p„‰„y„~„p„u„„„ƒ„ „ƒ„€ „ƒ„|„u„t„…„<E280A6>„u„z „y„~„†„€„‚„}„p„ˆ„y„y „€ „t„|„y„~„u
.copy:
ld a,l ;„t„€„ƒ„„„y„s„|„y „|„y „ƒ„w„p„„„<E2809E>„u „t„p„~„~„<>„u „{„€„~„u„‰„~„€„s„€ „p„t„„u„ƒ„p
.endL:
sub #FF
ld a,h
.endH:
sbc a,#FF
ret nc ;„^„†„†„u„{„„„y„r„~„p„<>„€„r„u„„{„p zf=1
ld c,(hl)
inc hl
ld b,(hl) ;bc=2byte „X„„„u„~„y„u „x„~„p„‰„u„~„y„ „ƒ„}„u„„u„~„y„
inc hl
.litteral:
ld a,0 ;litteral „<>„u„„u„<75>„y„ƒ„p„„„Ž „x„t„u„ƒ„Ž
and #0F
add a,#04 ;cf=0
push hl
ld h,d
ld l,e
sbc hl,bc ;hl=de-bc „I„ƒ„<C692>„€„|„Ž„x„…„z„„„u „t„p„~„~„<>„u, „{„€„„„€„<E2809A>„u „…„w„u „q„<71>„|„y „„p„ƒ„Š„y„„u„~„<>, „r „{„p„‰„u„ƒ„„„r„u „y„ƒ„„„€„‰„~„y„{„p „<>„u„„u„t„p„‰„y
ld b,0
ld c,a
cp #0F+#04
ex (sp),hl
call z,.getlength
ex (sp),hl
ldir ;„K„€„<E282AC>„y„„€„r„p„„„Ž „<>„u„„u„~„€„ƒ „…„w„u „„p„x„r„u„„~„…„„„<E2809E>„‡ „t„p„~„~„<>„‡
pop hl
jp .loop
.getlength: ;„P„€„|„…„‰„y„„„Ž „t„|„y„~„… „q„p„z„„„p „<>„u„„u„r„€„t„p („q„€„|„ބЄu) bc=„„„u„{„…„„p„ „ƒ„…„}„}„p „<>„u„„u„r„€„t„p
ld a,(hl)
inc hl
cp #FF ;#FF „…„t„r„p„y„r„p„u„„„ƒ„ „{„p„{ „x„~„p„{, „x„p „{„€„„„€„<E2809A>„} „ƒ„|„u„t„…„u„„ „y„~„†„€„‚„}„p„ˆ„y„ „€ „t„|„y„~„u
jr nz,.addlen
inc b
dec bc ;bc += 255
jr .getlength
.addlen:
add a,c
ld c,a
adc a,b
sub c
ld b,a ;bc=„t„|„y„~„p „<>„u„„u„t„p„r„p„u„}„€„s„€ „q„p„z„„„p
ret
;------------------------------------------------------------------------------
;in: hl=„~„p„‰„p„|„Ž„~„<>„z „p„t„„u„ƒ bc=„t„|„y„~„p
;out: bcde=„„u„x„…„|„Ž„„„p„„
crc32:
push hl
push bc
ld de,#FFFF ; 0xFFFFFFFF ? „~„p„‰„p„|„Ž„~„€„u „x„~„p„‰„u„~„y„u CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„€„s„€ „r ZIP
ld h,d
ld l,e
ld c,#20 ;„ƒ„€„{„„p„„u„~„y„u
exx
pop hl
dec hl
inc h
inc l
ld b,l
ld c,h
pop hl
.loop1:
ld a,(hl)
inc hl
exx
xor e
ld b,8
.loop2:
srl h
rr l
rr d
rra
jp nc,.skip
ld e,a
ld a,h
xor #ED
ld h,a
ld a,l
xor #B8
ld l,a
ld a,d
xor #83
ld d,a
ld a,e
; xor #20
xor c
.skip:
djnz .loop2
ld e,a
exx
djnz .loop1
dec c
jp nz,.loop1
exx
ld a,h ;CRC32, „y„ƒ„<C692>„€„|„Ž„x„…„u„}„<>„z „r ZIP, „<>„y„~„y„}„p„u„„ xor „ƒ 0xFFFFFFFF „r „{„€„~„ˆ„u
cpl
ld b,a
ld a,l
cpl
ld c,a
ld a,d
cpl
ld d,a
ld a,e
cpl
ld e,a
ret

View File

@ -1,89 +0,0 @@
CALL #E1D2
DI
LD (RelocatedCode.SPsave),SP
LD HL,.START
LD DE,#D800
LD BC,.END-.START
PUSH DE
LDIR
LD HL,#E1D1
LD DE,#FFFF
LD BC,#0850
RET
RelocatedCode:
.START:
LDDR
LD HL,#F7B0
LD DE,#D900
LD B,#00
LD A,(HL)
BIT 7,A
JR NZ,#D94A
AND #0F
LD B,A
RLD
ADD A,#03
LD C,A
INC HL
LD A,E
SUB (HL)
INC HL
LD SP,HL
LD H,(HL)
LD L,A
LD A,D
SBC A,B
LD B,H
LD H,A
LD A,B
LD B,#00
LDIR
LD H,B
LD L,C
ADD HL,SP
JR #D929
AND #7F
JR Z,#D967
INC HL
BIT 6,A
JR NZ,#D958
LD C,A
LDIR
JR #D928
AND #3F
ADD A,#03
LD B,A
LD A,(HL)
INC HL
LD C,(HL)
LD (DE),A
INC DE
DJNZ #D960
LD A,C
JR #D929
LD SP,#D85B
LD B,#03
POP HL
DEC SP
POP AF
LD (HL),A
DJNZ #D96C
.SPsave+1: LD SP,#0000
DI
RET
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
.END EQU $
; Š à⨭ª  ­  áâ à⮢®¬ íªà ­¥ á«¥¢  ᢥàåã
INCBIN 'SP_LOGO.BIN'

693
Crazy/ACEX_RAM.ASM Normal file
View File

@ -0,0 +1,693 @@
;ÛÛÛÛÛÛÛ ¨­¨æ¨ «¨§ æ¨ï á¨á⥬­ëå ¯®à⮢ Z84C15 ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
DI
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,3 ; Z84.REG.Misc_Ctrl
OUT (C),A ; Z84.SYS.Control
INC C
; boundary set!
LD A,1 ; enable CS0, disable CS1
OUT (C),A ; Z84.SYS.Data
;ÛÛÛÛÛÛÛ ¨­¨æ¨ «¨§ æ¨ï DCP ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
LD HL,INIT_SLOTS
DCP_INIT: LD C,XL
LD B,XH
LD E,YL
LD D,YH
EXX
;
LD HL,#C000
LD DE,#C001
LD BC,#3FFF
LD (HL),L
LDIR
;
LD IY,DCP_DATA
LD IX,.ret
;
.loop: LD L,(IY)
LD H,(IY+1)
LD E,(IY+2)
LD D,(IY+3)
LD B,(IY+4)
JP .PARSE_TABLE
;
.ret: LD BC,5
ADD IY,BC
LD A,(IY+2)
OR (IY+3)
JR NZ,.loop
;
EXX
LD XL,C
LD XH,B
LD YL,E
LD YH,D
; First IN command - OPEN DCP
IN A,(SLOT3)
JP (HL)
;
.PARSE_TABLE: LD A,L
AND E
LD L,A
;
LD A,H
AND D
OR #C0
LD H,A
;
LD A,D
OR #C0
LD D,A
;
.loop_parse: LD (HL),B
;
LD A,L ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR E ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,.carry ; ¢®§­¨ª ¯¥à¥­®á
;
OR E
XOR E ; ®¡­ã«¨âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
;
LD A,L
AND E ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD L,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
;
JR .loop_parse ; 横«
; A = 0
.carry: LD A,L ; § ¡¨âì ¨§¬¥­ï¥¬ë¥ ¡¨âë ­ã«ï¬¨
AND E
LD L,A
;
LD A,H ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR D ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,.return
;
OR D
XOR D
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
;
LD A,H
AND D ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD H,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
JR .loop_parse
.return: JP (IX)
;ÛÛÛÛÛÛÛ ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
INIT_SLOTS: XOR A
OUT (SLOT0),A
OUT (SLOT1),A
DEC A
OUT (SLOT2),A
LD A,SYS_PAGE
OUT (SLOT3),A
;ÛÛÛÛÛÛÛ ˆ­¨æ¨ «¨§ æ¨ï ¯®à⮢ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
OUT (SYS_PORT.ROM),A
;ÛÛÛÛÛÛÛ ˆ­¨æ¨ «¨§ æ¨ï á⥪  ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
LD SP,#4000
;ÛÛÛÛÛÛÛ <20>¥à¥¡à®á ®á⠢襣®áï ª®¤  ¢ RAM ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
LD HL,0
LD DE,#4000
LD BC,END_CB
LDIR
XOR A
OUT (FastRAM.SLOT0),A
OUT (SYS_PORT.RAM),A
INC A
OUT (SLOT1),A
IN A,(FastRAM.OFF)
; ’“’ Œ› “†… އ“ ’ŽŒ †… ŠŽ„… ˆ €„<E282AC>
; áâà ­¨æë 0,1,2,#FE
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛ <20> ¡®ç¨© ª®¤ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;  ¤à¥á ¯à®æ¥¤ãàë ®è¨¡ª¨
LD HL,ERROR
PUSH HL
;ÛÛÛÛÛÛÛ ˆ­¨æ¨ «¨§ æ¨ï HDD ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
CALL HDD_INIT
RET C
;ÛÛÛÛÛÛ “áâ ­®¢ª  áâà ­¨æ ¤«ï § £à㧪¨ ¤ ­­ëå ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
CALL Init_Mem
;ÛÛÛÛÛÛ ‡ £à㧪  ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
; ¤®¯®«­¨â¥«ì­ë¥ ä㭪樨
LOAD_FNs: LD A,(RESERVED_PAGES.SYS_FN) ; áâà ­¨æ  ¡ãä¥à , ¥á«¨  ¤à¥á ¢ ®ª­¥ #C000 (BLOCK_ID)
LD B,sys_fn_in_sectors ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
LD HL,bufer_adr ;  ¤à¥á ¡ãä¥à  ¤ ­­ëå
LD IX,sec_high ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  áâ àè ï ç áâì
LD DE,sec_low ;  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à  ¬« ¤è ï ç áâì
PUSH HL
CALL FN_HDD_READ
; Ž¡à § BIOS
LOAD_DATA: LD B,4
LD IY,RESERVED_PAGES.BIOS
POP HL
CALL .LOADER
; Š à⨭ª  ¨ €¯¤¥©â¥à
LD B,2
CALL .LOADER
JP BEGIN_CB_IMG
.LOADER: ; § £à㧪  ¯® 128 ᥪâ®à®¢
.loop: PUSH HL
PUSH BC
LD A,(IY)
LD B,128
LD DE,1
CALL FN_HDD_READ_NEXT
LD BC,4
ADD IY,BC
POP BC
POP HL
DJNZ .loop
RET
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°° <09>à®æ¥¤ãàë °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; FOR LBA ONLY - NEXT_READ
; HL - bufer, A - page
; B - numer of sectors
; DE - add_par (next+DE) (d.b. 1 for NEXT)
FN_HDD_READ_NEXT:
AND A
INC B
DEC B
RET Z ; ret if 0 sectors
CALL HD_WAIT
RET C
CALL NEXT_ADD_SEC
JR FN_HDD_READ.L1
;
; HL - BUFER, A - PAGE,
FN_HDD_READ: AND A
INC B
DEC B
RET Z
CALL HD_WAIT
CALL NC,HD_PREPARE
RET C
.L1: EXX
LD C,SLOT3
IN B,(C)
EXX
OUT (SLOT3),A
EX AF,AF'
;
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A
.L2: CALL WAIT_HDD
AND IDE.ControlByte.DataRequest
JR Z,.HD_RET
;
LD BC,IDE.Read.Data
INIR
INIR
;
LD A,H
OR L
JR NZ,.L2
;
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD H,high SYS_PAGE.RAMD_FAT ;!FIXIT ç¨â âì ¨§ â ¡«¨æë âãâ
LD L,A
LD A,(HL)
OUT (SLOT3),A
EX AF,AF'
LD HL,#C000
JR .L2
;
.HD_RET: EXX
OUT (C),B
EXX
LD BC,IDE.Read.Error
IN A,(C)
AND A
SCF
RET NZ
;
EX AF,AF'
AND A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
NEXT_ADD_SEC: PUSH AF
;
LD A,B
LD BC,IDE.Write.Counter ; “áâ ­®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
OUT (C),A
;
DEC B
INC C
IN A,(C) ; IDE.Read.Sector
ADC A,E
INC B
OUT (C),A ; IDE.Write.Sector
;
DEC B
INC C
IN A,(C) ; IDE.Read.CylinderLow
ADC A,D
INC B
OUT (C),A ; IDE.Write.CylinderLow
;
DEC B
INC C
IN A,(C) ; IDE.Read.CylinderHigh
ADC A,0
INC B
OUT (C),A ; IDE.Write.CylinderHigh
;
LD BC,IDE.Read.Control
IN A,(C)
LD D,A
ADC A,0
AND #0F
LD E,A
LD A,D
AND #F0
OR E
INC B
OUT (C),A ; IDE.Write.DeviceHead
;
POP AF
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
HD_PREPARE: PUSH AF
PUSH HL
; HD_CALC_SECS
LD L,E
LD E,D
LD D,XL
LD A,XH
AND #0F ; LBA 28
LD H,A
;
LD A,B
LD BC,IDE.Write.Counter ; “áâ ­®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
OUT (C),A
;
INC C
OUT (C),L
INC C
OUT (C),E
INC C
OUT (C),D
;
LD BC,IDE.Read.Control
IN A,(C)
AND #F0 ; !!!!! ¯®á¬®âà¥âì
OR H
INC B ; IDE.Write.DeviceHead
OUT (C),A
POP HL ; BUFER & PAGE
POP AF
AND A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
HDD_INIT: LD A,IDE.Chanel.Primary
OUT (IDE.Chanel.Set),A
CALL TEST_HDD_DRV
SCF
RET NZ
;
CALL WAIT_HDD
LD BC,IDE.Write.Command
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
OUT (C),A
CALL WAIT_HDD
AND IDE.ControlByte.DataRequest
SCF
RET Z
;
LD BC,IDE.Read.Data
LD HL,SYS_PAGE.HD_IDF_ADR
INIR
INIR
; B = 0
LD H,B
LD L,B
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
LD C,A
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
.loop: ADD HL,BC
DEC A
JR NZ,.loop
LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL
CALL WAIT_HDD
LD BC,IDE.Read.Control
IN A,(C)
AND #10
LD B,A
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
DEC A
AND #0F
OR IDE.Drive.Master
OR B
;
LD H,A
LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS)
AND %0000'0010
SCF
RET Z ; NO_LBA
;
SET 6,H
LD BC,IDE.Write.DeviceHead
OUT (C),H
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
.HDD_CONFIGURED:
LD BC,IDE.Write.Counter
OUT (C),A
LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
HD_CMD_EXE: CALL HD_WAIT
RET C
LD BC,IDE.Write.Command
OUT (C),A
HD_WAIT: PUSH DE
PUSH BC
PUSH AF
LD DE,0
.loop: LD BC,IDE.Read.Status
IN A,(C)
AND IDE.ControlByte.Busy
JR Z,.EXIT
DEC DE
LD A,D
OR E
JR NZ,.loop
POP AF
POP BC
POP DE
SCF
RET ; error
;
.EXIT: POP AF
POP BC
POP DE
AND A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
WAIT_HDD: LD BC,IDE.Read.Status
.loop: IN A,(C)
BIT IDE.ControlBit.Busy,A
JR NZ,.loop
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
Init_Mem: LD HL,SYS_PAGE.RAMD_FAT; ; €¤à¥á RAM FAT ¢ އ“.
; ®¡­ã«ï¥¬ â ¡«¨æã
XOR A
.loopFree: LD (HL),A
INC L
JR NZ,.loopFree
; १¥à¢¨à㥬 ᯥæ.áâà ­¨æë ¨ áâà ­¨æë ZX
LD B,RESERVED_PAGES.Blocks
LD DE,RESERVED_PAGES ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
.loop: LD A,(DE)
CP #FF
JR Z,.exitLoop
.loopBlk: INC DE
LD L,A
LD A,(DE)
LD (HL),A
CP #FF
JR NZ,.loopBlk
.exitLoop: INC DE
DJNZ .loop
LD L,A
LD (HL),A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
TEST_HDD_DRV: ;LD HL,#01FE
LD BC,IDE.Write.Counter
OUT (C),L
INC C
OUT (C),H ; IDE.Write.Sector
;
DEC C
DEC B
IN A,(C) ; IDE.Read.Counter
CP L
RET NZ
INC C
IN A,(C) ; IDE.Read.Sector
CP H
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
ERROR: ;°°°°°°° Œ¨£ ­¨¥ « ¬¯®çª®© âãà¡ë °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
LD A,SYS_PORT.TURBO.OFF
.big_loop: LD BC,0
OUT (SYS_PORT.ROM),A
.loop: DEC BC
INC B
DJNZ .loop
XOR 1
JR .big_loop
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
END_CB EQU $
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛ ’ ¡«¨æ  DCP ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
DCP_DATA: DW %00'000'0'0100'0000
DW %11'000'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %01'000'0'0100'0000
DW %11'010'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %10'000'0'0100'0000
DW %11'010'0'0110'1111
DB ACEX.IDE_DATA_1F0
DW %11'000'0'0100'0000
DW %11'000'0'0110'1111
DB ACEX.IDE_DATA_1F0
;
DW %00'000'0'0100'0001
DW %00'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
DW %00'010'0'0100'0001
DW %11'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
DW %11'010'0'0100'0001
DW %11'010'1'1110'1111
DB ACEX.IDE_ERROR_1F1
;
DW %00'000'0'0100'0010
DW %00'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
DW %00'010'0'0100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
DW %11'010'0'0100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_COUNTER_1F2
;
DW %00'000'0'0100'0011
DW %00'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
DW %00'010'0'0100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
DW %11'010'0'0100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_SECTOR_1F3
;
DW %00'000'0'0100'0100
DW %00'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
DW %00'010'0'0100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
DW %11'010'0'0100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_L_1F4
;
DW %00'000'0'0100'0101
DW %00'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
DW %00'010'0'0100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
DW %11'010'0'0100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_CYLINDER_H_1F5
;
DW %00'000'0'1100'0010
DW %00'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
DW %00'010'0'1100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
DW %11'010'0'1100'0010
DW %11'010'1'1110'1111
DB ACEX.IDE_DEVICE_HEAD_1F6
;
DW %00'000'0'1100'0011
DW %00'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
DW %00'010'0'1100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
DW %11'010'0'1100'0011
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_CMD_1F7
;
DW %00'000'0'1100'0100
DW %00'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
DW %00'010'0'1100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
DW %11'010'0'1100'0100
DW %11'010'1'1110'1111
DB ACEX.IDE_CONTROL_3F6
;
DW %00'000'0'1100'0101
DW %00'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
DW %00'010'0'1100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
DW %11'010'0'1100'0101
DW %11'010'1'1110'1111
DB ACEX.IDE_STATUS_3F7
;
DW %00'000'0'0010'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_1
DW %11'000'0'0010'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_1
;
DW %00'000'0'0011'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_2
DW %11'000'0'0011'1100
DW %11'001'1'1111'1111
DB ACEX.IDE_CHANEL_2
;
DW %00'000'0'1010'1100
DW %11'001'1'1111'1111
DB ACEX.RESET
DW %11'000'0'1010'1100
DW %11'001'1'1111'1111
DB ACEX.RESET
;
DW %00'000'0'0110'1101
DW %10'000'1'1111'1111
DB ACEX.Scorp_1FFD
DW %11'000'0'0110'1101
DW %11'000'1'1111'1111
DB ACEX.Scorp_1FFD
;
DW %00'000'0'1110'1101
DW %00'100'1'1110'1111
DB ACEX.Pent_7FFD
DW %00'100'0'1110'1101
DW %11'110'1'1110'1111
DB ACEX.Pent_7FFD
DW %11'100'0'1110'1101
DW %11'100'1'1110'1111
DB ACEX.Pent_7FFD
DW %10'000'0'0110'1101
DW %11'100'1'1110'1111
DB ACEX.Pent_7FFD
;
DW %00'000'0'0101'0110
DW %11'001'1'1111'1111
DB ACEX.ALL_MODE
DW %11'000'0'0101'0110
DW %11'001'1'1111'1111
DB ACEX.ALL_MODE
;
DW %00'000'0'0010'0100
DW %00'000'0'0010'1111
DB ACEX.CNF_PORT
;
DW %00'000'0'0000'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT0
DW %00'010'0'0000'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT0
DW %11'010'0'0000'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT0
;
DW %00'000'0'0010'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT1
DW %00'010'0'0010'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT1
DW %11'010'0'0010'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT1
;
DW %00'000'0'0100'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT2
DW %00'010'0'0100'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT2
DW %11'010'0'0100'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT2
;
DW %00'000'0'0110'1010
DW %00'010'0'0110'1111
DB ACEX.SLOT3
DW %00'010'0'0110'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT3
DW %11'010'0'0110'1010
DW %11'010'0'0110'1111
DB ACEX.SLOT3
; DCP END MARKER
DW 0,0,0
;-----------------------------------------------------------------------;
RESERVED_PAGES:; [x] Block #1 - ¬®¦­® ®á¢®¡®¤¨âì ¯® ID 1
; „®¯®«­¨â¥«ì­ë¥ ¯à®æ¥¤ãàë
.SYS_FN: DB SYS_FN_PAGE
; Ž¡à § <20>ˆŽ  ¤«ï ¯à®è¨¢ª¨
.BIOS: DB #10,#11,#12,#13
DB #14,#15,#16,#17
DB #18,#19,#1A,#1B
DB #1C,#1D,#1E,#1F
; Š à⨭ª 
.PICTURE: DB 2,3,4,5,6
; Ž¡à § ¯ ¬ïâ¨ á ¯à®è¨¢ «ì騪®¬
.FLASHER_RAM: DB 7,8
DB #FF ; End of the block
.Blocks EQU 1
.Size EQU $-RESERVED_PAGES
;-----------------------------------------------------------------------;

783
Crazy/IMG_PART.ASM Normal file
View File

@ -0,0 +1,783 @@
LD HL,RESERVED_PAGES
LD DE,#4000 + RESERVED_PAGES_COPY
LD BC,RESERVED_PAGES.Size
LDIR
LD SP,#4000
LD A,SYS_FN_PAGE
OUT (SLOT0),A
JP INIT_SCREEN - #4000
;
.start_code EQU $
;ÛÛÛÛÛÛÛ ¨­¨æ¨ «¨§ æ¨ï íªà ­  ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
INIT_SCREEN: CALL FN_SYNC
;
LD IX,VideoModes.graf_mode320x256
LD E,%00010001
CALL WIN_OPEN
;ÛÛÛÛÛÛÛ ¨­¨æ¨ «¨§ æ¨ï ¯ «¨âàë ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
INIT_PALETTE: ;IN A,(SLOT1)
;PUSH AF
LD B,#FF
LD HL,PICTURE.bdPallete ;#8FBC ;!HARDCODE PICTURE.bdPallete
LD DE,0
LD A,1
CALL SET_PALETTE
CALL SET_PICTURE
CALL SET_BOARD_NUMBER
; Ž¯à¥¤¥«¥­¨¥ 稯  <20>‡“
CALL DETECT_ROM
;
; ãáâ ­®¢ª  ॣ¨áâ஢
; ¯à릮ª ­  â®çªã ¢å®¤  ¢® ä«¥è¥à¥
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
SET_BOARD_NUMBER:
IN A,(SLOT3)
EX AF,AF'
LD A,#18 ;!HARDCODE
OUT (SLOT3),A
;
LD HL,(BOARD_ID_DATA.Start)
LD (BoardNumOffsets.Start),HL
LD HL,(BOARD_ID_DATA.Number)
LD (BoardNumOffsets.Number),HL
LD HL,(BOARD_ID_DATA.End)
LD (BoardNumOffsets.End),HL
LD A,(BOARD_ID_DATA.Type)
LD (BoardNumOffsets.Type),A
;
LD A,#10 ;!HARDCODE
OUT (SLOT3),A
LD A,(FOR_ACEX)
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
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
DISP_WINDOW EQU $
DISP #4000 + DISP_WINDOW
DETECT_ROM: LD HL,0
ADD HL,SP
LD SP,#4000
LD (.sp_save),HL
;
CALL TEST_ROM_CHIP ;!HARDCODE TEST_ROM_CHIP #8E59
LD (TST_R.jp),BC ;!HARDCODE TST_R.jp #81D5
;
.sp_save+1: LD SP,0000
XOR A
OUT (SYS_PORT.RAM),A
RET
ENT
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
SET_PICTURE: LD A,#FF - MAIN_PICTURE.PIC_Y
.loop_pic: PUSH AF
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
;
LD BC,MAIN_PICTURE.PIC_WIDTH
LDIR
;
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
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
LP_MODE_LINE: BIT 0,(IX+Window_Variables.USER.MODE_S)
JP NZ,LP_MODE_LINE2 ; ¨¤â¨ ­  ᯥªâàã¬
BIT 4,A
JP Z,LP_MODE_LINE3 ; ¨¤â¨ ­  £à ä¨ªã!
DEC D
; ⥪áâ®¢ë© à¥¦¨¬.
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP #80
JR NC,LP_EXIT_MODE
;
LP_MODE_RECURSE:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND 7FH
SUB 80
JR C,LP_MODE_LL
SUB 48
NEG
;
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
;
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND 3FH
SUB C
JR NC,LP_EXIT_MODE
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE
;
LP_MODE_LL: NEG
RRA
AND 3FH
CP C
JR NC,LP_MODE_LR
LD C,A
LP_MODE_LR: EX AF,AF'
INC D
LP_MD_LL1: EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC D
EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC D
DEC C
JR NZ,LP_MD_LL1
EX AF,AF'
LP_EXIT_MODE: LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
RET
;
; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
; Spectrum mode
LP_MODE_LINE2: LD A,(IX+Window_Variables.WORK_2)
LD B,(IX+Window_Variables.WORK_1)
;
DEC D
;
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP #80
JR NC,LP_EXIT_MODE2
;
LP_MODE_RECURSE2:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND #7F
SUB 80
JR C,LP_MODE_LL2
SUB 48
NEG
;
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
;
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND #3F
SUB C
JR NC,LP_EXIT_MODE2
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE2
;
LP_MODE_LL2: NEG
RRA
AND #3F
CP C
JR NC,LP_MODE_LR2
LD C,A
LP_MODE_LR2: EX AF,AF'
INC D
LP_MD_LL2: EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC L
LD (HL),B
INC L
LD (HL),B
DEC L
DEC L
INC D
BIT 4,A
JR NZ,lp_md_ll3x
INC B
lp_md_ll3x: EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC L
LD (HL),B
INC L
LD (HL),B
DEC L
DEC L
INC D
INC B
JR NZ,LP_NO_ADD_40
ADD A,#40
LP_NO_ADD_40: DEC C
JR NZ,LP_MD_LL2
EX AF,AF'
LP_EXIT_MODE2: LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD (IX+Window_Variables.WORK_1),B
LD (IX+Window_Variables.WORK_2),A
RET
;
; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
LP_MODE_LINE3: ; Grafic Mode
LD A,(IX+Window_Variables.WORK_1)
LD B,(IX+Window_Variables.WORK_2)
DEC D
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP #80
JR NC,LP_EXIT_MODE3
;
LP_MODE_RECURSE3:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND #7F
SUB 80
JR C,LP_MODE_LL3
SUB 48
NEG
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND #3F
SUB C
JR NC,LP_EXIT_MODE3
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE3
;
LP_MODE_LL3: NEG
RRA
AND #3F
CP C
JR NC,LP_MODE_LR3
LD C,A
LP_MODE_LR3: EX AF,AF'
INC D
BIT 5,B
JR Z,LP_GR_640
;
LP_MD_LL3: EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),B ; ०¨¬
INC L
LD (HL),A ; ०¨¬ 2
INC L
LD (HL),0 ; ०¨¬ 2
DEC L
DEC L
INC D
INC D
INC A
LD E,A
AND 7
JR NZ,LP_NO_INC_B
LD A,E
SUB 8
LD E,A
INC B
LP_NO_INC_B: LD A,E
DEC C
JR NZ,LP_MD_LL3
;
LP_640_RET: EX AF,AF'
LP_EXIT_MODE3: LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD A,(IX+Window_Variables.WORK_1)
ADD A,8
LD (IX+Window_Variables.WORK_1),A
RET
;
LP_GR_640: EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),B ; ०¨¬ 1
INC L
LD (HL),A ; ०¨¬ 2
INC L
LD (HL),0 ; ०¨¬ 3
INC D
EX AF,AF'
LD A,D
OUT (PORT_Y),A
EX AF,AF'
LD (HL),0 ; ०¨¬ 3
DEC L
LD (HL),A ; ०¨¬ 2
DEC L
LD (HL),B ; ०¨¬ 1
INC D
INC A
LD E,A
AND 7
JR NZ,LP_NO_INC_B6
LD A,E
SUB 8
LD E,A
INC B
LP_NO_INC_B6: LD A,E
DEC C
JR NZ,LP_GR_640
JP LP_640_RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; ¢å®¤: HL - ¤ ­­ë¥ ¯ «¨âàë RGB, E - ­ ç «ì­ë© 梥â
; D - ç¨á«® 梥⮢, B - PAL-mask, A - page PAL
SET_PALETTE: PUSH IX
;
EX AF,AF'
IN A,(RGADR)
PUSH AF ; á®åà ­¨âì ¯®«®¦¥­¨¥ RGADR
LD A,E
OUT (RGADR),A ; ­ ç «ì­ë© 梥⠢ ¯®àâ
LD A,D ; á®åà ­¨âì ç¨á«® 梥⮢
EX AF,AF' ; ¢¥à­ãâì áâà ­¨æã PAL
;
BIT 7,H ; ¯à®¢¥à¨âì  ¤à¥á ¤ ­­ëå
LD C,SLOT3 ; ¥á«¨ ­¨¦¥ 8000h
LD D,#C3 ; â® £à ä.íªà ­ ­  áâà ­¨æ¥ 3
JR Z,.NO_PAGE1
LD D,#43 ; ¨­ ç¥
LD C,SLOT1 ; ­  áâà ­¨æ¥ 1
.NO_PAGE1: ADD A,A
ADD A,A
AND #1C
XOR #E0 ; ¬« ¤è¨© ¡ ©â  ¤à¥á  PAL
LD E,A ; DE -  ¤à¥á ¢ ¢¨¤¥®-އ“
PUSH DE
POP IX ;  ¤à¥á ¯ «¨âàë
;
LD D,B ; ¬ áª  PAL
EX AF,AF' ; ¢¥à­ãâì ç¨á«® 梥⮢
LD B,A ; ç¨á«® 梥⮢
;
IN E,(C) ; á®åà ­¨âì áâà ­¨æã 3
LD A,#50 ; áâà ­¨æ  £à ä¨ç¥áª®£® RAM
OUT (C),A
.loopPal: ; 横« ãáâ ­®¢ª¨ 梥⮢ ¯ «¨âàë
LD A,(HL) ; B
AND D
LD (IX+2),A
INC HL
;
LD A,(HL) ; G
AND D
LD (IX+1),A
INC HL
;
LD A,(HL) ; R
AND D
LD (IX+0),A
INC HL
;
LD A,(HL) ; Y
AND D
LD (IX+3),A
INC HL
;
IN A,(RGADR)
INC A
OUT (RGADR),A
DJNZ .loopPal ; ¢ë¯®«­ïâì, ¯®ª  ­¥ 0
;
.exit: OUT (C),E ; ¢®ááâ ­®¢¨âì áâà ­¨æã 3
POP AF
OUT (RGADR),A ; ¢®ááâ ­®¢¨âì Y_PORT
POP IX
AND A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
LP_OPEN_PG: IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,C
LD (SYS_PAGE.COPY_SLOT3),A
IN A,(PORT_Y)
LD (SYS_PAGE.COPY_RGADR),A
RET
LP_CLOSE_PG: LD A,(SYS_PAGE.COPY_RGADR)
OUT (PORT_Y),A
LD A,(SYS_PAGE.COPY_SLOT3)
OUT (SLOT3),A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
WIN_OPEN: CALL LP_OPEN_PG
LD (SYS_PAGE.WIN_MAP_SC),IX ; ª àâ  ®ª­ 
PUSH DE
LD HL,(SYS_PAGE.WIN_MAP_SC)
LD DE,WIN_ID_0
LD BC,Window_UserVars
LDIR
LD IX,WIN_ID_0
POP DE
LD L,(IX+Window_Variables.USER.PLACE_H)
LD H,(IX+Window_Variables.USER.PLACE_V)
LD (IX+Window_Variables.MODE_E),E
;
LD A,L
ADD A,A
INC A ; ¢ëç¨á«¥­¨¥ PORT_Y
BIT 4,E
JR NZ,.LP_SET_NO_OR
OR #80 ; ¥á«¨ ¢ë¢®¤ ­  ¢â®à®© íªà ­
.LP_SET_NO_OR: LD (IX+Window_Variables.H_BEG),A
LD D,A
LD A,(IX+Window_Variables.USER.SIZE_H)
ADD A,A
ADD A,D
LD (IX+Window_Variables.H_END),A
LD (SYS_PAGE.WIN_MODE_SC),DE ; ¬¥áâ® ¯® £®à¨§®­â «¨ ¨ áâà ­¨æ  ¬®¤ë
LD A,H
AND #3F
ADD A,A
ADD A,A
LD L,A
LD H,#C3
LD (SYS_PAGE.WIN_MODE_SH),HL ; ¬¥áâ® ¯® ¢¥à⨪ «¨ á  ¤à¥á®¬
LD (IX+Window_Variables.V_BEG),A
LD A,(IX+Window_Variables.USER.SIZE_V)
ADD A,A
ADD A,A
ADD A,L
LD (IX+Window_Variables.V_END),A
;
LD L,(IX+Window_Variables.V_BEG)
LD H,#C3
LD B,(IX+Window_Variables.USER.SIZE_V) ; à §¬¥à ¯® ¢¥à⨪ «¨
;
LD (IX+Window_Variables.WORK_1),0
LD A,(IX+Window_Variables.USER.MODE) ; §­ ª®£¥­¥à â®à ¯«îá ०¨¬
LD (IX+Window_Variables.WORK_2),A
BIT 4,A
JR NZ,.LOOP ; ¯¥à¥å®¤, ¥á«¨ ⥪áâ®¢ë© à¥¦¨¬
;
AND #F0
LD C,A
LD A,(IX+Window_Variables.USER.GR_X)
RRCA
RRCA
RRCA
LD D,A
AND #0F
OR C
LD (IX+Window_Variables.WORK_2),A
;
LD A,D
AND #E0
LD C,A
LD A,(IX+Window_Variables.USER.GR_Y)
AND #1F
OR C
RLCA
RLCA
RLCA
LD (IX+Window_Variables.WORK_1),A
;
.LOOP: LD D,(IX+Window_Variables.H_BEG) ; D - ­ ç «® áâப¨ (PORT_Y)
LD C,(IX+Window_Variables.USER.SIZE_H) ; à §¬¥à ¯® £®à¨§®­â «¨
LD A,(IX+Window_Variables.USER.MODE) ; §­ ª®£¥­¥à â®à ¯«îá ०¨¬
;
PUSH BC
CALL LP_MODE_LINE
POP BC
INC L
INC L
INC L
INC L
DJNZ .LOOP
;
LD A,(IX+Window_Variables.MODE_E)
AND 1
OUT (RGMOD),A
CALL LP_CLOSE_PG
CALL LP_INI_P
CALL LP_SIZE
XOR A
RET
;
LP_INI_P: EX AF,AF'
EXX
CALL LP_OPEN_PG
; ®âªàë⨥ £à ä¨ç¥áª®£® íªà ­ 
; LP_INI_NO_ZG:
LD A,(WIN_ID_0.H_BEG)
LD D,A
LD A,(WIN_ID_0.V_BEG)
LD L,A
INC L
LD H,#C3
AND A
LD A,(WIN_ID_0.USER.MODE)
BIT 5,A
LD A,(WIN_ID_0.USER.SIZE_H)
JR NZ,LP_INI_40
ADD A,A
SCF
;!TODO çâ®-â® âãâ ¯®¤¢ë¯¨«¥­­®
LP_INI_40: LD B,A
LD (WIN_ID_0.SIZE_REL),A
EX AF,AF'
EXX
JP LP_END_P
;
; WIN_MAP_SC - ª àâ  íªà ­ 
; 0 - hor size
; 1 - ver size
; 2 - hor place
; 3 - ver place
LP_SIZE: ; ®¯à¥¤¥«¥­¨¥ size
CALL LP_OPEN_PG
LD DE,(WIN_ID_0.USER.SIZE_H)
LD A,(WIN_ID_0.USER.MODE)
BIT 5,A
CALL LP_CLOSE_PG
RET NZ
LD A,E
ADD A,A
LD E,A
RET
;
LP_END_P: LD A,SYS_PAGE
OUT (SLOT3),A
.SYS_PAGE: EX AF,AF'
EXX
RLA
LD E,A
LD (WIN_ID_0.reg_HL),HL ; ¬¥áâ® ¯¥ç â¨
LD (WIN_ID_0.reg_DE),DE
LD (WIN_ID_0.reg_BC),BC
CALL LP_CLOSE_PG
EXX
EX AF,AF'
AND A
RET
.short: EX AF,AF'
EXX
CALL LP_CLOSE_PG
EXX
EX AF,AF'
AND A
RET
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
FN_SYNC: LD A,Port_VSYNC.SET_320L
OUT (Port_VSYNC),A
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD A,(SYS_PAGE.VSyncAndWaits)
OR 1
LD (SYS_PAGE.VSyncAndWaits),A
;
.INT_DEF: LD DE,(SYS_PAGE.CONFIG_ALL)
OUT (C),B
LD IX,SCREEN_TABLES.PENTAGON
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF'
LD (SYS_PAGE.COPY_SLOT3),A
IN A,(PORT_Y)
LD (SYS_PAGE.COPY_RGADR),A
LD (SYS_PAGE.CONFIG_ALL),IX
XOR A
;----[START]-----------------------[? 1]
.loop_1: OUT (PORT_Y),A
EX AF,AF'
LD A,#50
OUT (SLOT3),A
LD HL,#C300
;----[START]------------------[v 2]-----
.loop_2: LD C,(IX)
;----[START]-------------[v 3]----------
.loop_3: ; ¢§ïâì  ¤à¥á ¤ ­­ëå ¤«ï § ¯¨á¨ ¢ á«ã¦¥¡­ãî ®¡« áâì íªà ­ 
LD E,(IX+1) ; take adress of line X
LD D,(IX+2)
;----[START]--------[v 4]---------------
.loop_4:
LD A,(DE) ; take counter in table 1, line X, column Y
INC DE
AND A
JR Z,.loop_4_exit ; exit if zero-counter
LD B,A
LD A,(DE)
INC DE
;----[START]---[v 5]--------------------
.loop_5:
LD (HL),A
INC L
LD (HL),0
INC L
LD (HL),0
;
EX AF,AF'
INC A
OUT (PORT_Y),A
EX AF,AF'
;
LD (HL),0
DEC L
LD (HL),0
DEC L
LD (HL),A
;
EX AF,AF'
INC A
OUT (PORT_Y),A
EX AF,AF'
DJNZ .loop_5
;--------------[^ 5]--------------------
JR .loop_4
;-------------------[^ 4]---------------
.loop_4_exit: INC HL ; next line
INC HL
INC HL
INC HL
IN A,(PORT_Y)
AND #80
OUT (PORT_Y),A
DEC C
JR NZ,.loop_3
;------------------------[^ 3]----------
INC IX ; next counter
INC IX
INC IX
LD A,(IX)
AND A
JR NZ,.loop_2
;-----------------------------[^ 2]-----
LD A,SYS_PAGE
OUT (SLOT3),A
LD IX,(SYS_PAGE.CONFIG_ALL)
EX AF,AF'
ADD A,#80
JR NC,.loop_1
;----------------------------------[^ 1]
; Exit
LD A,(SYS_PAGE.COPY_RGADR)
OUT (PORT_Y),A
LD A,(SYS_PAGE.COPY_SLOT3)
OUT (SLOT3),A
.exit: OR A
RET
;--- Screen data table 1: counter1, data1 .. counterX, dataX
SCREEN_TABLES:; | ç¨á«® | §­ ç¥­¨ï |
; | áâப | ¢ |
; | /2 | áâப å |
.SCR: DB 41 , #F8
DB 3 , #FC
DB 4 , #FC
DB 7 , #FC
DB 9 , #F8
DB 0
.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0
.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0
.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0
;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX
;
; | ª®«-¢® | §­ ç¥­¨ï |
; | áâப | ¢ |
; | | áâப¥ |
.PENTAGON: DB 33 : DW .SCR
DB 1 : DW .INT ; DW .BLN
DB 3 : DW .SNC
DB 1 : DW .BLN
DB 1 : DW .SCR
DB 1 : DW .RES
DB 0 ; end
;---
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
;---------------------------------------------------------------------;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
RESERVED_PAGES_COPY: BLOCK RESERVED_PAGES.Size,#FF
.SYS_FN EQU RESERVED_PAGES.SYS_FN - RESERVED_PAGES
.BIOS EQU RESERVED_PAGES.BIOS - RESERVED_PAGES
.PICTURE EQU RESERVED_PAGES.PICTURE - RESERVED_PAGES
.FLASHER_RAM EQU RESERVED_PAGES.FLASHER_RAM - RESERVED_PAGES
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;-----------------------------------------------------------------------;
BYTE "ACEX 1K"
FOR_ACEX: DB "0" + TYPE_OF_ACEX
BYTE "0"
BYTE "FULL BOARD ID:"
BOARD_ID_DATA:
.Start: DW #5283
.Number: DW 0 ; ¢ë¢®¤¨âáï ª ª 5 ¤¥áïâ¨ç­ëå æ¨äà: 0..99999 ¨«¨ #0000..#270F
.End: DW #47E8
.Type: DB 0
BYTE "--<=END=>--"
;-----------------------------------------------------------------------;

46
CrazyBlaster.asm Normal file
View File

@ -0,0 +1,46 @@
INCLUDE 'Shared_Includes/constants/SP2000.inc'
INCLUDE 'Build/updater.inc'
;INCLUDE 'Shared_Includes/structures/FileSystem.inc'
;INCLUDE 'Shared_Includes/macroses/macros.z80'
;INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc'
DEFINE sec_high 0
DEFINE sec_low 1
DEFINE SYS_FN_PAGE 1
;DEFINE ACEX_ROM_COPY_PAGE 0
DEFINE bufer_adr #C000
DEFINE sys_fn_in_sectors #4000 / #200
DEFINE bios_size_in_sectors 512
DEFINE flasher_size_in_sectors 1
DEFINE image_size_in_sectors flasher_size_in_sectors + bios_size_in_sectros
DEFINE TYPE_OF_ACEX 3 ; 3 - 1K30, 5 - 1K50
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ[ FIRST SECTION - CONF ROM ]ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
OUTPUT './Build/CrazyBlaster.raw'
ORG #0000
BEGIN_CB: INCLUDE 'Crazy/ACEX_RAM.ASM'
END_FIRST_SECTION EQU $
;
DISPLAY "ROM size = ",/A,END_FIRST_SECTION - BEGIN_CB
OUTEND
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ[ SECOND SECTION - IMAGE ON DRIVE ]ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
;OUTPUT './Build/CrazyBlasterIMG.raw'
OUTPUT './Build/CB_BIOS_IMG.raw'
ORG #0000
;BEGIN_CB_IMG: INCLUDE 'Crazy/IMG_PART.ASM'
BEGIN_CB_IMG: INCLUDE 'Crazy/IMG_PART.ASM'
END_SECOND_SECTION EQU $
;
DISPLAY "IMG size = ",/A,END_SECOND_SECTION - BEGIN_CB_IMG
OUTEND
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;

@ -1 +1 @@
Subproject commit 93ab93917db326a86a0ffecc02a62f6f6ef7a938 Subproject commit 4662474034c70f4b2627ff8eca10ccdf4a7d3525