;z80 ;zx-spectrum ;assembler ; scr, dsc, rgb, img, ani, vsp, pt3, 888, Y viewer 0.5 TestDOS EQU 8345 Out_DOS EQU 10835 WaitDOS EQU 16117 SaveDOS EQU 16330 LoadDOS EQU 16357 cat_adr EQU #6000 tab_adr EQU #6800 vsplens EQU #BF20 MACRO DBW DB :0 DW :1 ENDM ORG #6900 PT3addr INCBIN "PT3?69" ORG $ BEGIN LD A,(23798) CALL DRIVE EI LD (stack+1),SP CALL FF_TEST CALL ATMTEST CALL PAL_ATM CALL DEVTEST LD HL,cat_adr LD DE,0 LD B,8 CALL LOAD CALL FINDFNT CALL MAKETAB CALL PANEL LD HL,KeysTab INKEYS LD (tabadr+1),HL prog_1 CALL WAITKEY tabadr LD HL,0 LD C,A prog_2 LD A,(HL) AND A JR Z,prog_1 INC HL CP C JR Z,prog_3 INC HL INC HL JR prog_2 RET prog_3 LD A,(HL) INC HL LD H,(HL) LD L,A OR H SCF RET Z CALL CALL_HL JR prog_1 CALL_HL JP (HL) KeysTab DBW "Q",CRS_UP DBW "9",CRS_UP DBW 11,CRS_UP DBW "A",CRS_DN DBW "8",CRS_DN DBW 10,CRS_DN DBW "O",CRS_PU DBW "6",CRS_PU DBW 8,CRS_PU DBW "P",CRS_PD DBW "7",CRS_PD DBW 9,CRS_PD DBW " ",SHOW DBW 13,SHOW DBW "1",DIZK DBW "2",DIZK DBW "3",DIZK DBW "4",DIZK DBW "F",CAT_ALL DBW "T",TXTVIEW DBW "!",0 DB 0 CAT_ALL CALL CURSOR LD HL,filter+1 RR (HL) LD A,31 ADC A,0 LD (HL),A RRA LD A,(tab_adr) JR NC,call_1 CP 31 JR C,call_B XOR A LD (CursPos),A LD HL,tab_adr LD (UpTab),HL JP PRN_CAT call_B LD DE,(UpTab) car_1 LD A,(CursPos) LD L,A LD H,0 ADD HL,HL ADD HL,DE LD A,(HL) CP 31 JR C,car_E LD HL,tab_adr SBC HL,DE JR Z,car_2 DEC DE DEC DE JR car_1 car_2 LD HL,CursPos LD A,(HL) DEC (HL) AND A JR NZ,car_1 LD (HL),0 car_E LD (UpTab),DE call_1 call_X CALL PRN_CAT JP CURSOR DIZK LD A,C SUB "1" AND 3 CALL DRIVE LD HL,0 LD (cat_adr),HL LD HL,cat_adr LD DE,0 LD B,8 CALL LOAD CALL MAKETAB JP PANEL CRS_PD LD B,17 cpd_1 PUSH BC CALL CRS_DN POP BC DJNZ cpd_1 RET CRS_DN LD A,(CursPos) INC A LD HL,(UpTab) LD E,A LD D,0 ADD HL,DE ADD HL,DE LD A,(filter+1) DEC A CP (HL) RET C LD A,(CursPos) INC A CP 18 JR C,cup_1 LD DE,(UpTab) INC DE INC DE JR cup_2 CRS_PU LD B,17 cpu_1 PUSH BC CALL CRS_UP POP BC DJNZ cpu_1 RET CRS_UP LD A,(CursPos) SUB 1 JR C,TAB_UP cup_1 PUSH AF CALL CURSOR POP AF LD (CursPos),A JP CURSOR TAB_UP LD HL,tab_adr LD DE,(UpTab) AND A SBC HL,DE RET Z DEC DE DEC DE cup_2 LD (UpTab),DE CALL CURSOR CALL PRN_CAT JP CURSOR DLINE LD (HL),C CALL NEXT_HL DJNZ DLINE RET ALINE LD (HL),C ADD HL,DE DJNZ ALINE RET HLINE LD (HL),C INC HL DJNZ HLINE RET PANEL LD A,7 LD (color+1),A LD A,#37 LD (colflag),A CALL CLS LD HL,#4000 LD BC,#C010 CALL DLINE LD HL,#4009 LD BC,#C010 CALL DLINE LD HL,#5800 LD DE,32 LD BC,#1802 CALL ALINE LD HL,#5809 LD BC,#1802 CALL ALINE LD HL,#43A0 LD BC,#0AFF CALL HLINE LD HL,#58A0 LD BC,#0A02 CALL HLINE CALL PRN_CAT LD A,2 LD (color+1),A LD DE,#40A3 CALL PRINTS LD A,(POSIT+1) AND 3 ADD A,"A" CALL PRINT LD A,":" CALL PRINT CALL PRINTS XOR A LD (crsfla+1),A LD HL,KeysTab LD (tabadr+1),HL LD HL,#010F LD (23561),HL CALL NOKEY CURSOR LD HL,tab_adr LD A,(filter+1) DEC A CP (HL) RET C LD DE,#58C1 LD A,(CursPos) LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE crsfla LD A,0 CPL LD (crsfla+1),A AND A crscol LD A,0 JR Z,crz_0 LD A,(HL) LD (crscol+1),A LD A,#28 crz_0 LD B,8 crz_1 LD (HL),A INC L DJNZ crz_1 skip RET INCLUDE "LV_SHOW",13 INCLUDE "LV_SHOW2",14 LOAD_1 LD E,(IX+14) LD D,(IX+15) LD B,1 LD HL,#BF00 CALL LOAD LD (nextTRS+1),DE LD HL,#BF00 RET LOAD_NX PUSH AF PUSH BC PUSH DE LD HL,#BF00 nextTRS LD DE,0 LD B,1 CALL LOAD LD (nextTRS+1),DE POP DE POP BC POP AF LD HL,#BF00 RET LOADALL LD A,(IX+13) LD E,(IX+14) LD D,(IX+15) LD C,0 ish_1 SUB 64 JR C,ish_2 PUSH AF PUSH BC LD B,64 CALL IMLOAD POP BC POP AF INC C JR ish_1 ish_2 ADD A,64 AND A RET Z LD B,A CP 63 JP NZ,IMLOAD LD B,64 JP IMLOAD GET_MIN AND A SBC HL,DE EX DE,HL RET NC ADD HL,DE RET IMGBANK PUSH BC LD (imgyet+1),A LD BC,ImgRams vspage ADD A,C LD C,A JR NC,$+3 INC B LD A,(BC) JR bank_1 BANK PUSH BC bank_1 LD BC,#7FFD AND 7 OR #10 LD (CurBank),A OUT (C),A POP BC RET CurBank DB 0 ImgRams DB #16,#14,#13,#17 VspRams DB #11,#13,#10,#14,#16,#10,#17 NEXT_HL INC H LD A,H AND 7 RET NZ HALF_HL LD A,32 ADD A,L LD L,A RET C LD A,-8 ADD A,H LD H,A RET IMLOAD LD A,C CALL IMGBANK LD HL,#C000 JP LOAD INPUTJ LD C,0 LD HL,PORTS LD A,#FE IN A,(254) AND 1 JR NZ,INPJ_1 LD HL,PORTS1 INPJ_1 LD A,(HL) AND A RET Z IN A,(254) INC HL AND (HL) INC HL JR NZ,INPJ_2 LD A,C OR (HL) LD C,A INPJ_2 INC HL JR INPJ_1 PORTS DB #EF,1,16,#EF,2,8,#EF,4,4,#EF,8,1,#EF,16,2 PORTS1 DB #7F,1,16,#7F,4,16 DB #DF,1,1,#DF,2,2 DB #FB,1,8 DB #FD,1,4 DB 0 NOKEY XOR A IN A,(254) CPL AND 31 JR NZ,NOKEY RET DLOAD LD DE,0 JR flo_1 FLOAD LD E,(IX+14) LD D,(IX+15) flo_1 CALL LOAD LD (DLOAD+1),DE RET PRN_CAT LD DE,#40C1 LD HL,(UpTab) LD A,#A7 LD (PRINT),A LD (colflag),A pcat_1 PUSH DE LD A,#F0 LD (scrmask+1),A CPL LD (fntmask+1),A LD C,(HL) INC HL LD B,(HL) INC HL LD A,C filter CP 31 ; 31 - с фильтром, 32 - без JR C,pcat_1A LD BC,FreFile DEC HL DEC HL JR pcat_2 pcat_1A PUSH HL LD L,B LD H,0 LD A,C LD BC,col_tab ADD A,C LD C,A ADC A,B SUB C LD B,A LD A,(BC) LD (color+1),A LD BC,cat_adr ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,BC EX (SP),HL POP BC pcat_2 PUSH BC EX (SP),HL CALL PRINTS LD B,8 CALL B_PRN CALL PRINTS LD A,(HL) CALL PRINT CALL TESTEXT JR C,pcat_3 LD B,A CALL TESTEXT LD C,A JR NC,pcat_4 pcat_3 LD BC," " pcat_4 LD A,B CALL PRINT LD A,C CALL PRINT CALL PRINTS POP HL POP DE LD A,E AND #E0 INC A ADD A,32 LD E,A JR NC,pcat_1 LD A,D ADD A,8 LD D,A CP #58 JR C,pcat_1 LD (DownTab),HL RET col_tab DB #05,#05,#45,#42,#42,#42,#03,#04 DB #44,#06,#47,#43,#07,#02,#45,#45 DB #46,#46,#01,#01,#01,#01,#01,#01 DB #01,#01,#01,#01,#01,#01,#01,#01 TESTEXT INC HL LD A,(HL) CP 32 RET C CP 128 CCF RET FreFile DB " " MAKETAB LD DE,#C000 LD HL,cat_adr LD BC,16 mtb_Z1 LD A,(HL) LD (DE),A INC DE ADD HL,BC AND A JR NZ,mtb_Z1 LD HL,tab_adr LD (UpTab),HL XOR A LD (CursPos),A LD DE,BAS_TST ;11 BASIC LD A,11 CALL ADD_TAB LD DE,BWS_TST ; 0 bw-SCR XOR A CALL ADD_TAB LD A,1 LD DE,SCR_TST ; 1 SCR+atr CALL ADD_TAB LD A,2 LD DE,MCX_TST ; 2 2scr CALL ADD_TAB LD A,3 LD DE,RGB_TST ; 3 RGB CALL ADD_TAB LD A,4 LD DE,T8T_TST ; 4 888 CALL ADD_TAB LD A,5 LD DE,Y_TST ; 5 Y CALL ADD_TAB LD A,6 LD DE,IMG_TST ; 6 image CALL ADD_TAB LD A,7 LD DE,ANI_TST ; 7 animation CALL ADD_TAB LD A,8 LD DE,VSP_TST ; 8 VSP-movie CALL ADD_TAB LD A,9 LD DE,PT3_TST ; 9 PT3 muzix CALL ADD_TAB LD A,10 LD DE,TXT_TST ;10 text CALL ADD_TAB LD A,12 LD DE,PAK_TST ;12 .p, start<#4000 - pack txt CALL ADD_TAB LD A,(EXTFLAG) AND A LD A,13 LD DE,LAY_TST ;13 *.16c : 4layer-screen CALL NZ,ADD_TAB LD A,14 LD DE,CH6_TST ;14: chunkz 1536 CALL ADD_TAB LD A,15 LD DE,CHC_TST ;15: chunkz 3076 CALL ADD_TAB LD A,16 LD DE,FN8_TST ;16: font 2048 CALL ADD_TAB LD A,17 LD DE,FN3_TST ;17: font 768 CALL ADD_TAB LD A,31 LD DE,ALL_TST ;31 что-то другое CALL ADD_TAB LD (HL),#21 LD DE,#C000 LD HL,cat_adr LD BC,16 mta_1 LD A,(DE) LD (HL),A INC DE ADD HL,BC AND A JR NZ,mta_1 RET ADD_TAB LD (testad+1),DE LD D,0 LD E,A LD IX,cat_adr LD BC,16 mtab_1 LD A,(IX) AND A RET Z CP 1 JR Z,mtab_N PUSH DE testad CALL 82 POP DE JR NZ,mtab_N mtab_Y LD (IX),1 LD (HL),E INC HL LD (HL),D INC HL mtab_N ADD IX,BC INC D JR mtab_1 ALL_TST XOR A RET CH6_TST CALL CHK_EXT RET NZ LD D,#06 JR len_tst CHC_TST CALL CHK_EXT RET NZ LD D,#0C JR len_tst FN8_TST LD D,#08 JR len_tst FN3_TST LD D,#03 JR len_tst BWS_TST LD D,#18 JR len_tst SCR_TST LD D,#1B JR len_tst MCX_TST LD D,#36 JR len_tst RGB_TST LD D,#48 len_tst LD A,(IX+13) CP D RET NZ CP (IX+12) RET NZ LD A,(IX+11) AND A RET PAK_TST LD A,(IX+8) CP "p" JR Z,pts_1 CP "P" RET NZ pts_1 LD A,(IX+10) AND #C0 RET BAS_TST LD A,(IX+8) CP "B" RET NZ LD (IX+9),"A" LD (IX+10),"S" RET Y_TST LD A,(IX+8) CP "Y" RET NZ LD A,(IX+9) AND A RET NZ LD A,(IX+10) CP #B8 RET TXT_TST LD A,(IX+8) CP "W" RET Z LD DE,txt_EXT CALL CP_EXT RET Z LD DE,nfo_EXT CALL CP_EXT RET Z LD DE,diz_EXT JR CP_EXT CHK_EXT LD DE,chk_EXT JR CP_EXT LAY_TST LD DE,lay_EXT JR CP_EXT T8T_TST LD DE,t8t_EXT JR CP_EXT IMG_TST LD DE,img_EXT JR CP_EXT ANI_TST LD DE,ani_EXT JR CP_EXT VSP_TST LD DE,vsp_EXT JR CP_EXT PT3_TST LD DE,pt3_EXT CALL CP_EXT JR Z,muz_tst LD A,(IX+8) CP "m" RET NZ muz_tst LD A,(IX+13) DEC A CP 63 RET NC XOR A RET img_EXT DB "img" ani_EXT DB "ani" vsp_EXT DB "vsp" pt3_EXT DB "pt3" t8t_EXT DB "888" txt_EXT DB "txt" nfo_EXT DB "nfo" diz_EXT DB "diz" lay_EXT DB "16c" chk_EXT DB "ch$" CP_EXT LD A,(IX+8) CALL CP_ONE RET NZ LD A,(IX+9) CALL CP_ONE RET NZ LD A,(IX+10) CP_ONE CP "A" JR C,cpo_1 CP "Z"+1 JR NC,cpo_1 ADD A,32 cpo_1 EX DE,HL CP (HL) EX DE,HL INC DE RET WAITKEY RES 5,(IY+1) wkey_1 HALT BIT 5,(IY+1) JR Z,wkey_1 LD A,(23560) CP "a" RET C CP "z"+1 RET NC SUB 32 RET ADDING INC A add_1 DEC A RET Z ADD HL,DE JR add_1 CLS LD HL,#4000 LD DE,#4001 LD BC,#1800 LD (HL),L LDIR LD BC,767 LD (HL),7 LDIR XOR A OUT (254),A RET B_PRN LD A,(HL) INC HL CALL PRINT DJNZ B_PRN RET STRING LD A,(HL) AND A RET Z INC HL CP 1 JR Z,str_1 CP 32 CALL NC,PRINT JR STRING str_1 LD E,(HL) INC HL LD D,(HL) INC HL JR STRING PRINTS XOR A PRINT AND A RET C PUSH BC PUSH DE PUSH HL EX DE,HL LD DE,FONT ADD A,E LD E,A JR NC,$+3 INC D LD B,#08 PUSH HL prn_1 LD A,(HL) scrmask AND #F0 LD (HL),A EX DE,HL fntmask LD A,#0F AND (HL) EX DE,HL OR (HL) LD (HL),A INC H INC D DJNZ prn_1 POP HL colflag SCF JR C,prn_2 LD A,H RRA RRA RRA AND 3 OR #58 LD H,A color LD (HL),0 prn_2 LD A,(scrmask+1) LD (fntmask+1),A CPL LD (scrmask+1),A CP #0F prn_E POP HL POP DE POP BC RET NZ INC E LD A,E AND 31 RET NZ LD A,#37 LD (PRINT),A RET SCR_ADR LD A,C RRCA RRCA RRCA AND #E0 OR B LD L,A LD A,C AND #18 OR #40 LD H,A RET TO_ATR LD A,H RRA RRA RRA AND 3 OR #58 LD H,A RET FONT INCBIN "z80-6.f" LOAD LD A,#A7 JR loas SAVE LD A,#37 loas LD (discom),A load_0 DI CALL POSIT XOR A LD (23766),A load_1 PUSH BC PUSH DE PUSH HL LD A,E INC A LD C,95 CALL OUT_DOS discom AND A PUSH AF CALL NC,LOADER POP AF CALL C,SAVER DI POP HL POP DE POP BC LD A,(23766) AND A JR NZ,diskERR INC E LD A,E CP 16 JR C,load_2 LD E,0 INC D CALL POSIT load_2 INC H DJNZ load_1 AND A EI RET diskERR CALL RESETC CALL RESETC CALL RESETC LD A,#FE IN A,(254) RRA JR C,load_0 LD A,#7F IN A,(254) RRA JR C,load_0 SCF EI RET POSIT LD A,0 ; (POSIT+1) = диск AND 3 OR #3C BIT 0,D JR Z,LOAD_4 AND #EF LOAD_4 LD C,255 CALL OUT_DOS LD A,D SRL A LD C,127 CALL OUT_DOS LD A,24 CALL OUT_COM CALL WAITDOS DI RET LOADER LD A,128 CALL OUT_COM LD C,127 CALL RD_DOS JR IN_1F SAVER LD A,160 CALL OUT_COM LD C,127 CALL WR_DOS IN_1F LD BC,IN_1F PUSH BC LD B,1 PUSH BC PUSH HL LD HL,TestDOS JR in_dos DRIVE AND 3 LD (POSIT+1),A OR #3C LD C,255 CALL OUT_DOS CALL RESETC CALL RESETC CALL RESETC RESETC LD A,8 CALL OUT_COM CALL WAITDOS DI XOR A LD C,95 JR OUT_DOS RD_DOS PUSH HL LD HL,LoadDOS JR in_dos WR_DOS PUSH HL LD HL,SaveDOS JR in_dos WAITDOS PUSH HL LD HL,WaitDOS JR in_dos OUT_COM LD C,31 OUT_DOS PUSH HL LD HL,Out_DOS in_dos EX (SP),HL JP 15663 UpTab DW 0 DownTab DW 0 CursPos DB 0 ATMTEST XOR A LD (ATMFLAG),A DEC A LD (#C000),A LD BC,#7FFD LD A,#10 OUT (C),A LD BC,#FFF7 LD A,#C0 CALL OUT_DOS XOR A LD (#C000),A LD BC,#FFF7 LD A,#F8 CALL OUT_DOS LD A,(#C000) LD (ATMFLAG),A RET DEVTEST LD HL,#4000 LD (HL),H LD A,%0100 OUT (#DF),A LD (HL),L XOR A OUT (#DF),A LD A,(HL) LD HL,ATMFLAG OR (HL) LD (EXTFLAG),A RET ATMFLAG DB 0 EXTFLAG DB 0 SET_RGB LD A,(ATMFLAG) AND A LD HL,Paletz JR NZ,pal_set XOR A CALL BANK LD HL,#B800 LD A,%1101 ; R CALL DROPLAY LD A,%1110 ; G CALL DROPLAY LD A,%1100 ; B DROPLAY OUT (#DF),A LD DE,#4000 LD BC,#1800 LDIR RET SET_BRG LD A,(ATMFLAG) AND A LD HL,Palet2 JR NZ,pal_set XOR A CALL BANK LD HL,#B800 LD A,%1100 ; B CALL DROPLAY LD A,%1101 ; R CALL DROPLAY LD A,%1110 ; G JR DROPLAY pal_set LD A,#A0 LD (xip_A+1),A OR 8 LD (xip_B+1),A CALL pal_atm LD A,#A3 LD (xip_A+1),A OR 8 LD (xip_B+1),A RET PAL_ATM LD A,(ATMFLAG) AND A RET Z LD HL,Paletz pal_atm LD BC,#0177 xip_A LD A,#A3 CALL OUT_DOS LD BC,#1000 pale_1 LD A,C OUT (#FE),A LD A,(HL) OUT (#FF),A INC HL INC C DJNZ pale_1 XOR A OUT (#FE),A LD BC,#FF77 xip_B LD A,#A3+8 JP OUT_DOS Paletz DB #FF,#DF,#BF,#9F,#7F,#5F,#3F,#1F DB #FF,#FE,#FD,#FC,#EF,#EE,#ED,#EC Palet2 DB #FF,#7F,#DF,#5F,#BF,#3F,#9F,#1F DB #FF,#EF,#FE,#EE,#FD,#ED,#FC,#EC FF_TEST LD HL,#4000 LD DE,#4001 LD BC,#1AFF LD (HL),L LDIR HALT LD HL,#4000 LD BC,#FF fft_1 IN A,(255) LD L,A LD (HL),1 DEC C JR NZ,fft_1 DJNZ fft_1 LD L,#FF LD A,(HL) INC L ADD A,(HL) CP 2 JR NZ,fft_E INC L LD B,254 fft_2 ADD A,(HL) CP 2 JR NZ,fft_E INC L DJNZ fft_2 LD A,#A7 JR fft_3 fft_E LD A,#37 fft_3 LD (FDELAY),A RET FDELAY SCF JR C,FF_no ffy_1 IN A,(#FF) INC A JR Z,ffy_1 RET FF_no LD BC,1344 ; 1120/1344 SCRP/PENT dsc_1 DEC C JR NZ,dsc_1 DJNZ dsc_1 RET FINDFNT LD HL,cat_adr ffn_0 LD A,(HL) AND A RET Z LD DE,fontdsc LD B,11 PUSH HL ffn_1 LD A,(DE) CP (HL) JR NZ,ffn_2 INC DE INC HL DJNZ ffn_1 POP HL JR ffn_F ffn_2 POP HL LD BC,16 ADD HL,BC JR ffn_0 ffn_F LD DE,14 ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD HL,FONT LD B,8 JP LOAD fontdsc DB "lv_font fnt" PT_Tab INCBIN "tb_PT" ST_Tab INCBIN "tb_ST" ASM_Tab INCBIN "tb_ASM" RealTab INCBIN "tb_REAL" HRUST INCBIN "DEHRUST" DISPLAY "end ",/H,$,":#B800 max" DISPLAY "code ",PT3addr,",",$-PT3addr