commit 2db8eaa0375ffebdb1bab07b782dbf9dc0d8f9c3 Author: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri Jul 11 00:15:20 2025 +1000 Old version diff --git a/2DSTUDIO.ASM b/2DSTUDIO.ASM new file mode 100644 index 0000000..9d928bf --- /dev/null +++ b/2DSTUDIO.ASM @@ -0,0 +1,2094 @@ +;ORG_ ORG #8100 +INTA: EQU #80 +MSH: EQU 19 +IPOINT: EQU 8 + +;DOSPAGE EQU #00 +WINPAGE: EQU #08 ;#20 +DIRPAGE: EQU #09 ;#21 + +;[BEGIN] +; +; 2DSTUDIO.EXE +; + ORG #8100-512 +; INCLUDE "dos_equ.asm" + INCLUDE "SYS_EQU.ASM" + DB "EXE" ;EXE ID + DB #00 ;EXE VERSION + DW #0200 ;CODE OFFSET LOW + DW #0000 ;CODE OFFSET HIGH + DW #0000 ;END-BEG ;PRIMARY LOADER + DW #0000 ; + DW #0000 ;RESERVED + DW #0000 ; + DW BEGIN ;LOAD ADDRESS + DW BEGIN ;START ADDRESS + DW #8000 ;STACK ADDRESS + DS 490 + + +BEGIN: DI + JP START_2DS + JP IKEYBOARD + +START_2DS: LD (_SP+1),SP + LD SP,#80F0 + PUSH IX + POP HL + INC HL + INC HL + XOR A + LD (CLEARRAM),A + LD (LOADING),A + LD DE,PRMBUFF + LD BC,#0745 + RST #10 + LD A,(PRMBUFF) + OR A + JR Z,CONT_2DS + CP "-" + JR NZ,GETFNAME + LD A,(PRMBUFF+1) + SUB #20 + CP "X" + JR NZ,CONT_2DS + LD A,#FF + LD (CLEARRAM),A +GETFNAME: + LD A,#FF + LD (LOADING),A + LD HL,PRMBUFF + LD DE,DIRITEM + LD BC,#0144 + RST #10 + JR NC,CONT_2DS + XOR A + LD (LOADING),A +CONT_2DS: + LD C,#51 + RST #10 + LD (CURRMODE),A + LD A,#81 + LD BC,#0050 + RST #10 + LD C,1 + RST #30 + + LD C,3 + RST #30 + PUSH HL + PUSH DE + + LD C,PAGE0 + IN B,(C) + PUSH BC + LD A,B + LD (DOSPAGE),A + LD A,WINPAGE + OUT (C),A + LD HL,WN_FACE + LD DE,#100 + LD BC,WN_FACE.Size + LDIR + POP BC + OUT (PAGE0),A + + CALL GO +; LD A,DOSPAGE +; OUT (PAGE0),A + +; LD A,2 +; LD C,0 +; RST #18 + + LD A,WINPAGE + OUT (PAGE0),A + LD C,#93 + LD A,#0E + CALL IPOINT ;CLEAR + LD BC,#0592 + LD A,#0E + CALL IPOINT ;GET MEMORY + LD BC,#0094 + LD HL,PIXPAGE +SLEPAGE: LD A,#0E + PUSH HL + PUSH BC + CALL IPOINT ;GET PAGES + POP BC + POP HL + LD (HL),A + INC HL + INC B + LD A,5 + CP B + JP NZ,SLEPAGE +; CALL INIT +; LD HL,#4000 +; LD BC,#0880 +; LD E,1 +; CALL IPOINT + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#12EE ;& CURSOR COLORS + LD BC,#FFA4 ;#EE,#EF + XOR A + CALL IPOINT + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#12EE ;& CURSOR COLORS + LD BC,#FFA4 ;#EE,#EF + LD A,1 + CALL IPOINT + + POP DE + POP HL + LD C,4 + CALL INTMOUS + + CALL INTON + LD C,0 + CALL INTMOUS + XOR A + LD C,6 + CALL INTMOUS + LD C,1 + CALL INTMOUS + LD BC,256 + EXX + LD HL,0 + LD DE,0 + LD BC,320 + CALL OPTIMIZ + LD HL,#0000 + CALL CONST + CALL OPEN2DS + LD C,2 + CALL INTMOUS + CALL INTOFF + DI +; LD BC,#1FFD +; LD A,0 +; OUT (C),A +; LD A,5 +; OUT (PAGE1),A +; LD A,0 +; OUT (PAGE3),A + LD A,0 + OUT (Y_PORT),A +EXIT: ;LD BC,#0080 +; LD E,0 +; CALL #3D13 + DI +; LD IY,#5C3A + LD A,(DOSPAGE) + OUT (PAGE0),A +;_SP LD SP,#0000 + EI + + LD A,(CLEARRAM) + OR A + JR NZ,NOCLEAR0 + +;GET ID 1-ST RAMDISK + LD A,#0D ;RAM DISK NUMBER + LD C,#CE ;GET RAM DISK'S ID + RST #08 + OR A + JR Z,SKK1 + + LD C,#C3 ;FREE MEM + RST #08 + + LD C,#CA ;FREE DRIVE + LD A,#0D + RST #08 + +SKK1: +;GET ID 2-ND RAMDISK + LD A,#0E ;RAM DISK NUMBER + LD C,#CE ;GET RAM DISK'S ID + RST #08 + OR A + JR Z,SKK2 + + LD C,#C3 ;FREE MEM + RST #08 + + LD C,#CA ;FREE DRIVE + LD A,#0E + RST #08 + + +SKK2: + +NOCLEAR0: + LD C,2 + RST #30 + LD A,(CURRMODE) + LD C,#50 + LD B,0 + RST #10 + + LD HL,MSGHEL + LD C,#5C + RST #10 + + DI +_SP: LD SP,#0000 + EI + LD B,0 + LD C,#41 + RST #10 + RET + +PALCOL: ; B G R + DB #00,#00,#00,#00 ;CURSOR + DB #FF,#FF,#FF,#00 ;CURSOR + + DB #00,#00,#00,#00 ;BLACK + DB #00,#00,#80,#00 ;RED + DB #00,#80,#00,#00 ;GREEN + DB #00,#80,#80,#00 ;YELLOW + DB #80,#00,#00,#00 ;BLUE + DB #80,#00,#80,#00 ;MAGENTA + DB #80,#80,#00,#00 ;CYAN + DB #80,#80,#80,#00 ;BLACK/GRAY + DB #C0,#C0,#C0,#00 ;WHITE/GRAY + DB #00,#00,#FF,#00 ;RED + DB #00,#FF,#00,#00 ;GREEN + DB #00,#FF,#FF,#00 ;YELLOW + DB #FF,#00,#00,#00 ;BLUE + DB #FF,#00,#FF,#00 ;MAGENTA + DB #FF,#FF,#00,#00 ;CYAN + DB #FF,#FF,#FF,#00 ;WHITE + + INCLUDE "GRAFOPEN.ASM" + +IKEYBOARD: + RET + +DO_LOADING: + XOR A + LD (LOADING),A + CALL RD_FILE + CALL CONVERT + RET + +DOSPAGE: DB 0 + +CURRMODE: DB 0 + +CLEARRAM: DB 0 + +LOADING: DB 0 + +MSGHEL: DB 13,10,"2D Studio (c) 2001 PETERS PLUS LTD",13,10,0 + +XBANK: DB #00 + +PIXPAGE: DS #80 + +PIXOPEN: XOR A +PIXBANK: PUSH BC + PUSH HL + LD (XBANK),A + LD C,A + LD B,0 + IN A,(PAGE3) + LD (RETBANK+1),A + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +PIXFIX: PUSH BC + PUSH HL + LD (XBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +PIXNEXT: PUSH BC + PUSH HL + LD A,(XBANK) + INC A + LD (XBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + RET + +PIXNXT: PUSH BC + PUSH HL + LD A,(XBANK) + INC A + LD (XBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + SET 7,H + SET 6,H + LD A,XH + OR #C0 + LD XH,A + RET + + +PIXPRV: PUSH BC + PUSH HL + LD A,(XBANK) + DEC A + LD (XBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + RET + +RETBANK: LD A,#00 + OUT (PAGE3),A + RET + +OPEN2DS: LD HL,SPRITE_ + CALL INITSPR + LD IX,RDIALOG + LD HL,USERini + CALL DLGinit + LD BC,183 + EXX + LD HL,5+MSH + LD DE,56 + LD BC,287-MSH-5 + CALL OPTIMIZ + LD HL,#0401 + CALL LCONST + CALL PALET + LD A,(COLOR) + CALL M_COLOR + CALL M_COLOU + LD A,BLACK + CALL SBODY + LD IX,F_BAR + LD HL,8 + LD DE,20 + CALL CHARS + LD HL,2 + LD DE,30 + LD BC,320-4-100 + CALL HZ2LINE + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#12EE ;& CURSOR COLORS + LD BC,#FFA4 ;#EE,#EF + LD A,1 + CALL IPOINT + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#EE*4+NEWPAL + LD BC,#12*4 + LDIR + CALL CLS + + LD A,(LOADING) + OR A + CALL NZ,DO_LOADING + + CALL IBARS + CALL REFRWIN + LD A,(CRTOOL) + CALL TOOL +AGA: CALL WAITMSG + CALL USERwrk + JP AGA + LD IX,MAINM + LD HL,5 + LD DE,18 +; CALL HBAR + RET + +NOZOM1: PUSH DE + PUSH HL + CALL PUTPIX + POP HL + POP DE + CALL PUTPNT2 + XOR A + RET + + INCLUDE "TOOLS.ASM" + +WORKA: LD C,3 + CALL INTMOUS + CP 1 + RET NZ + PUSH HL + PUSH DE + CALL LOBJECT + LD DE,#0401 + AND A + SBC HL,DE + POP DE + POP HL + LD A,0 + RET NZ + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + LD A,(ZOOMMOD) + OR A + JP Z,NOZOM12 + SRL H + RR L + SRL H + RR L + SRL H + RR L + SRL D + RR E + SRL D + RR E + SRL D + RR E + PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,PPIX + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,PPIX + POP HL + JP WORKA +PPIX: POP HL + PUSH DE + PUSH HL + CALL PUTPIX + POP HL + POP DE + LD (PREVX),HL + LD (PREVY),DE + CALL PUTPNT + LD HL,(SHIFTX) + LD DE,(SHIFTY) + LD BC,33 + CALL DATAPIX + JP WORKA + +NOZOM12: PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,PPIX2 + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,PPIX2 + POP HL + JP WORKA +PPIX2: POP HL + PUSH DE + PUSH HL + CALL PUTPIX + POP HL + POP DE + LD (PREVX),HL + LD (PREVY),DE + CALL PUTPNT2 + JP WORKA + +PUTPNT2: LD A,(COLOR) +PUTPNT3: LD BC,(X_) + ADD HL,BC + EX DE,HL + LD BC,(Y_) + ADD HL,BC + EX DE,HL + CALL POINT + RET + +PUTPIX: PUSH HL + PUSH DE + LD BC,(SHIFTX) + ADD HL,BC + LD BC,(SHIFTY) + EX DE,HL + ADD HL,BC + EX DE,HL + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +PUTPIX1: LD A,D + OR E + JR Z,PUTPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR PUTPIX1 +PUTPIX2: EX DE,HL + ADD IX,DE + CALL C,PIXNEXT +; LD DE,(SHIFTX) +; ADD IX,DE +; CALL C,PIXNEXT + LD A,(COLOR) + LD (IX),A + CALL RETBANK + POP DE + POP HL + RET + +GETPIX: PUSH HL + PUSH DE + LD BC,(SHIFTX) + ADD HL,BC + LD BC,(SHIFTY) + EX DE,HL + ADD HL,BC + EX DE,HL + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +GETPIX1: LD A,D + OR E + JR Z,GETPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR GETPIX1 +GETPIX2: EX DE,HL + ADD IX,DE + CALL C,PIXNEXT +; LD DE,(SHIFTX) +; ADD IX,DE +; CALL C,PIXNEXT + LD A,(IX) + PUSH AF + CALL RETBANK + POP AF + POP DE + POP HL + RET + + +PUTPNT: SLA L + RL H + SLA L + RL H + SLA L + RL H + SLA E + RL D + SLA E + RL D + SLA E + RL D + LD BC,(X_) + ADD HL,BC + EX DE,HL + LD BC,(Y_) + ADD HL,BC + EX DE,HL + LD BC,8 + EXX + LD BC,8 + EXX + LD A,(COLOR) + CALL SBODY + CALL RECTAN + RET + +REFRWIN: LD A,(ZOOMMOD) + OR A + JP Z,FULLSCR + CALL ZOOMPIX +; CALL GRID + LD HL,(SHIFTX) + LD DE,(SHIFTY) + LD BC,33 + JP DATAPIX + +FULLSCR: LD HL,(SHIFTX) + LD DE,(SHIFTY) + LD BC,33*8 + JP FULLPIX + +ZOOMPIX: LD BC,33 + PUSH BC + CALL PIXOPEN + LD DE,(SHIFTY) + LD IX,AREAPIX + LD BC,(X_SIZE) +ZOMPIX1: LD A,D + OR E + JR Z,ZOMPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR ZOMPIX1 +ZOMPIX2: LD HL,(X_) + LD DE,(Y_) + POP BC + LD A,23 +ZOMPIX3: PUSH AF + PUSH BC + PUSH HL + PUSH DE + PUSH IX + LD A,(XBANK) + PUSH AF + EXX + LD BC,(SHIFTX) + ADD IX,BC + CALL C,PIXNEXT + EXX + CALL COPY_ZL + POP AF + CALL PIXFIX + POP IX + LD BC,(X_SIZE) + ADD IX,BC + CALL C,PIXNEXT + POP HL + LD BC,8 + ADD HL,BC + EX DE,HL + POP HL + POP BC + POP AF + DEC A + JP NZ,ZOMPIX3 + CALL RETBANK + RET + +COPY_ZL: PUSH BC + LD BC,8 +ZOOM_Z1: EXX + LD BC,8 + EXX + PUSH HL + PUSH DE + LD A,(IX) + CALL SBODY + CALL RECTAN + INC IX + LD A,XH + RLCA + CALL NC,PIXNEXT + POP DE + POP HL + POP BC + DEC BC + LD A,B + OR C + RET Z + PUSH BC + LD BC,8 + ADD HL,BC + JP ZOOM_Z1 + +CLS: CALL PIXOPEN + CALL CBNK + CALL PIXNEXT + CALL CBNK + CALL PIXNEXT + CALL CBNK + CALL PIXNEXT + CALL CBNK + CALL PIXNEXT + CALL CBNK + CALL RETBANK + LD HL,0 + LD (SHIFTX),HL + LD (SHIFTY),HL + LD HL,320 + LD (X_SIZE),HL + LD HL,256 + LD (Y_SIZE),HL + LD HL,#4436 + LD (FLSIZE),HL + LD HL,#0001 + LD (FHSIZE),HL + RET + +CBNK: LD HL,AREAPIX + LD DE,AREAPIX+1 + LD BC,16383 + LD A,WHITE + LD (HL),A + LDIR + RET + +IBARS: LD HL,(SHIFTY) + CALL SBVAL ;CURRENT VALUE + LD HL,(Y_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(HEIGHT_) + CALL SBWIN ;BIG ADDER + LD IX,VSBA01 + LD A,0 + CALL SBV_WRK + CALL RSBLEN ;BAR LENGHT + LD (Y_LENB),HL + CALL RSBHGT + LD (Y_HGTB),HL + + LD HL,(SHIFTX) + CALL SBVAL ;CURRENT VALUE + LD HL,(X_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(WIDTH_) + CALL SBWIN ;BIG ADDER + LD IX,HSBA01 + LD A,0 + CALL SBH_WRK + CALL RSBLEN ;BAR LENGHT + LD (X_LENB),HL + CALL RSBHGT + LD (X_HGTB),HL + RET + +USERwrk: ;P 1 +; JP Z,ACT_ + CP 3 + JP Z,PUSH_ + CP 4 + JP Z,UNPUSH_ + CP 5 + JP Z,DRAGS_ + CP 6 + JP Z,DROPS_ + LD A,1 + RET + +ACT_: LD A,H + CP 4 +; JP Z,WORKAS + LD A,2 + RET + +DRAGS_: LD A,H + CP 1 + JR Z,DRAG_ + CP 6 + JR Z,DRAG8_ + CP 7 + JR Z,DRAG8_ + LD A,2 + RET + +DROPS_: LD A,H + CP 1 + JR Z,DROP_ + CP 6 + JR Z,DROP8_ + CP 7 + JR Z,DROP8_ + LD A,2 + RET + +DROP8_: LD A,L + AND #02 + JP NZ,YPDROP + LD A,0 + RET + +DROP_: LD A,L + CP #0A + JP NC,NODROP +YPDROP: CALL PUSHBUT + LD A,0 + RET + +NODROP: CP #12 + JR NC,YPDROP + LD A,0 + RET + +DRAG8_: LD A,L + AND #02 + JP NZ,YPDRAG + LD A,0 + RET + +DRAG_: LD A,L + CP #0A + JP NC,NODRAG +YPDRAG: CALL POPBUT + LD A,0 + RET + +NODRAG: CP #12 + JR NC,YPDRAG + LD A,0 + RET + +PUSH_: LD A,H + CP 1 + JR Z,BCUT1 + CP 4 + JP Z,WORK_ + CP 6 + JP Z,PSBAR + CP 7 + JP Z,PSBAR2 + CP #CC + JP Z,PALE + LD A,2 + RET + +UNPUSH_: LD A,H + CP 1 + JP Z,BCUT0 + CP 6 + JP Z,USBAR + CP 7 + JP Z,USBAR2 + LD A,2 + RET + +PSBAR: LD A,L + CP 2 + JP Z,PB6 + CP 3 + JP Z,PB7 + LD A,3 + RET + +USBAR: LD A,L + CP 2 + JP Z,UB6 + CP 3 + JP Z,UB7 + LD A,3 + RET + +PSBAR2: LD A,L + CP 2 + JP Z,PB4 + CP 3 + JP Z,PB5 + LD A,3 + RET + +USBAR2: LD A,L + CP 2 + JP Z,UB4 + CP 3 + JP Z,UB5 + LD A,3 + RET + +BCUT1: LD A,L + CP 0 + JP Z,PB0 + CP 1 + JP Z,PB1 + CP 2 + JP Z,PB2 + CP 3 + JP Z,PB3 + CP 4 + JP Z,PB4A + CP 5 + JP Z,PB5A + CP 6 + JP Z,PB6A + CP 7 + JP Z,PB7 + CP 8 + JP Z,PB8 + CP 9 + JP Z,PB9 +; CP #0A +; JP NC,TOOL + CP #12 + JP C,TOOL + CP #20 + JP Z,PBPALU + CP #21 + JP Z,PBPALD + LD A,3 + RET + +BCUT0: LD A,L + CP 0 + JP Z,UB0 + CP 1 + JP Z,UB1 + CP 2 + JP Z,UB2 + CP 3 + JP Z,UB3 + CP 4 + JP Z,UB4A + CP 5 + JP Z,UB5A + CP 6 + JP Z,UB6A + CP 7 + JP Z,UB7 + CP 8 + JP Z,UB8 + CP 9 + JP Z,UB9 + CP #20 + JP Z,UBPALU + CP #21 + JP Z,UBPALD + LD A,3 + RET + + +TESTSX: LD HL,(X_SIZE) + LD BC,(WIDTH_) + AND A + SBC HL,BC + RET C + SBC HL,DE + RET + +TESTSY: LD HL,(Y_SIZE) + LD BC,(HEIGHT_) + AND A + SBC HL,BC + RET C + SBC HL,DE + RET + + +TOOL: PUSH AF + LD A,(CRTOOL) + LD H,#01 + LD L,A + CALL POPBUT + POP AF + LD (CRTOOL),A + LD H,#01 + LD L,A + CALL PUSHBUT + LD A,(CRTOOL) + SUB #0A + LD C,6 + CALL INTMOUS + LD A,0 + RET + +MOVE_DOWN: + LD HL,(SHIFTY) + INC HL + EX DE,HL + CALL TESTSY + LD A,0 + RET C + EX DE,HL + LD (SHIFTY),HL + RET + +;DOWN +PB7: CALL PUSHBUT +PBL7: CALL MOVE_DOWN + CALL MOVE_DOWN + CALL MOVE_DOWN + CALL MOVE_DOWN + CALL SBVAL ;CURRENT VALUE + LD HL,(Y_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(HEIGHT_) + CALL SBWIN ;BIG ADDER + LD HL,(Y_LENB) + CALL SBLEN ;BAR LENGHT + LD HL,(Y_HGTB) + CALL SBHGT + + LD IX,VSBA01 + LD A,2 + CALL SBV_WRK + + CALL REFRWIN + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBL7 + LD A,0 + RET + +MOVE_UP: + LD HL,(SHIFTY) + LD A,H + OR L + RET Z + DEC HL + LD (SHIFTY),HL + RET + +;UP +PB6: CALL PUSHBUT +PBL6: CALL MOVE_UP + CALL MOVE_UP + CALL MOVE_UP + CALL MOVE_UP + CALL SBVAL ;CURRENT VALUE + LD HL,(Y_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(HEIGHT_) + CALL SBWIN ;BIG ADDER + LD HL,(Y_LENB) + CALL SBLEN ;BAR LENGHT + LD HL,(Y_HGTB) + CALL SBHGT + + LD IX,VSBA01 + LD A,1 + CALL SBV_WRK + + CALL REFRWIN + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBL6 + LD A,0 + RET + +MOVE_RIGHT: + LD HL,(SHIFTX) + INC HL + EX DE,HL + CALL TESTSX + LD A,0 + RET C + EX DE,HL + LD (SHIFTX),HL + RET + +;RIGHT +PB5: CALL PUSHBUT +PBL5: CALL MOVE_RIGHT + CALL MOVE_RIGHT + CALL MOVE_RIGHT + CALL MOVE_RIGHT + CALL SBVAL ;CURRENT VALUE + LD HL,(X_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(WIDTH_) + CALL SBWIN ;BIG ADDER + LD HL,(X_LENB) + CALL SBLEN ;BAR LENGHT + LD HL,(X_HGTB) + CALL SBHGT + + LD IX,HSBA01 + LD A,2 + CALL SBH_WRK + + CALL REFRWIN + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBL5 + LD A,0 + RET + +MOVE_LEFT: + LD HL,(SHIFTX) + LD A,H + OR L + RET Z + DEC HL + LD (SHIFTX),HL + RET + +;LEFT +PB4: CALL PUSHBUT +PBL4: CALL MOVE_LEFT + CALL MOVE_LEFT + CALL MOVE_LEFT + CALL MOVE_LEFT + CALL SBVAL ;CURRENT VALUE + LD HL,(X_SIZE) + CALL SBMAX ;MAX VALUE + LD HL,(WIDTH_) + CALL SBWIN ;BIG ADDER + LD HL,(X_LENB) + CALL SBLEN ;BAR LENGHT + LD HL,(X_HGTB) + CALL SBHGT + + LD IX,HSBA01 + LD A,1 + CALL SBH_WRK + + CALL REFRWIN + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBL4 + LD A,0 + RET + +;new document +PB1: CALL PUSHBUT + CALL CLS + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#12EE ;& CURSOR COLORS + LD BC,#FFA4 ;#EE,#EF + LD A,1 + CALL IPOINT + LD HL,PALCOL ;SET DESKTOP PALETTE + LD DE,#EE*4+NEWPAL + LD BC,#12*4 + LDIR + CALL IBARS + CALL REFRWIN + LD A,0 + RET + + +PBPALD: CALL PUSHBUT +PBPAL2: LD A,(UPCOLOR) + INC A + CP 215 + JR Z,PBPALN + LD (UPCOLOR),A + CALL PALET + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBPAL2 +PBPALN: LD A,0 + RET + +PBPALU: CALL PUSHBUT +PBPAL3: LD A,(UPCOLOR) + OR A + RET Z + DEC A + LD (UPCOLOR),A + CALL PALET + LD C,3 + CALL INTMOUS + CP 1 + JP Z,PBPAL3 + LD A,0 + RET + +PB6A: +PB5A: +PB4A: +PB9: +PB8: +PB3: +PB2: +PB0: CALL PUSHBUT + LD A,0 + RET + +LQ1: EQU 33*8/2 +LQ8: EQU 33/2 +HQ1: EQU 23*8/2 +HQ8: EQU 23/2 + +UB8: CALL POPBUT +UNZOOM: LD HL,(SHIFTX) + LD BC,LQ8 + ADD HL,BC + LD DE,LQ1 + SBC HL,DE + JR NC,EZO3 + LD HL,0 +EZO3: LD (SHIFTX),HL + + LD HL,(SHIFTY) + LD BC,HQ8 + ADD HL,BC + LD DE,HQ1 + SBC HL,DE + JR NC,EZO4 + LD HL,0 +EZO4: LD (SHIFTY),HL + LD BC,23*8 + EXX + LD BC,33*8 + CALL TSTZOOM + +UNZOO: LD HL,(SHIFTX) + LD DE,(SHIFTY) + LD BC,33*8 + CALL FULLPIX + LD HL,33*8 + LD (WIDTH_),HL + LD HL,23*8 + LD (HEIGHT_),HL + LD A,0 + LD (ZOOMMOD),A + CALL IBARS + LD A,0 + RET + +UB9: CALL POPBUT + LD HL,(SHIFTX) + LD BC,LQ1-LQ8 + ADD HL,BC + LD (SHIFTX),HL + + LD HL,(SHIFTY) + LD BC,HQ1-HQ8 + ADD HL,BC + LD (SHIFTY),HL + LD BC,23 + EXX + LD BC,33 + CALL TSTZOOM + +ZOOM: CALL ZOOMPIX + LD HL,33 + LD (WIDTH_),HL + LD HL,23 + LD (HEIGHT_),HL + LD A,1 + LD (ZOOMMOD),A + CALL IBARS + LD A,0 + RET + +TSTZOOM: LD HL,(SHIFTX) +; LD BC,33*8 + ADD HL,BC + EX DE,HL + LD HL,(X_SIZE) + SBC HL,DE + JR NC,TZOMX5 + LD HL,(X_SIZE) +; LD BC,33*8 + AND A + SBC HL,BC + JR NC,TZOMX6 + LD HL,0 +TZOMX6: LD (SHIFTX),HL +TZOMX5: EXX + LD HL,(SHIFTY) +; LD BC,23*8 + ADD HL,BC + EX DE,HL + LD HL,(Y_SIZE) + SBC HL,DE + JR NC,TZOMX7 + LD HL,(Y_SIZE) +; LD BC,23*8 + AND A + SBC HL,BC + JR NC,TZOMX8 + LD HL,0 +TZOMX8: LD (SHIFTY),HL +TZOMX7: EXX + RET + + +UB0: CALL POPBUT + POP HL + LD A,0 + RET + +UBPALU: +UBPALD: +UB6A: +UB5A: +UB4A: +UB7: +UB6: +UB5: +UB4: +UB1: CALL POPBUT + LD A,0 + RET + +;LOAD FILE +UB3: CALL POPBUT + + CALL LDFILE + LD IX,OPNFDLG + CALL DLGclos + LD IX,RDIALOG + CALL DLGopen + LD HL,0 + LD (SHIFTX),HL + LD (SHIFTY),HL + XOR A + LD (UPCOLOR),A + CALL SETAWIN + CALL IBARS + CALL PALET + CALL REFRWIN + XOR A + RET + + +UB2: CALL POPBUT + CALL SVFILE + LD IX,SAVFDLG + CALL DLGclos + LD IX,RDIALOG + CALL DLGopen + CALL SETAWIN + CALL REFRWIN + XOR A + RET + +F_BAR: DB "File Edit View Image Tools Options",0 + +PALOBJ: DW #CC00 + +COLOR: DB #F0 + +CRTOOL: DB #0A + +ZOOMMOD: DB #00 + +PALE: LD A,L + CP #00 + JP Z,SCO + LD A,3 + RET + +SCO: LD C,3 + CALL INTMOUS + EX DE,HL + LD DE,64 + AND A + SBC HL,DE + SRL H + RR L + SRL H + RR L + LD A,(UPCOLOR) + ADD A,L + CALL M_COLOR + RET + +M_COLOR: LD (COLOR),A + CALL SBODY + LD HL,37*8-1 + LD DE,4*8-1 + LD BC,18 + EXX + LD BC,18 + EXX + CALL PLACE + RET + +M_COLOU: LD HL,28*8-1 + LD DE,4*8-1 + LD BC,8*8+2 + EXX + LD BC,18 + EXX + CALL PLACE + LD HL,28*8 + LD DE,4*8 + LD A,BLACK +PPAL1: PUSH DE + PUSH HL + PUSH AF + LD BC,8 + EXX + LD BC,8 + EXX + CALL RECTAN + POP AF + POP HL + POP DE + LD BC,8 + ADD HL,BC + INC A + CP BLACK+8 + JP NZ,PPAL1 + LD HL,28*8 + LD DE,5*8 +PPAL2: PUSH DE + PUSH HL + PUSH AF + LD BC,8 + EXX + LD BC,8 + EXX + CALL RECTAN + POP AF + POP HL + POP DE + LD BC,8 + ADD HL,BC + INC A + CP 0 ;BLACK+16 + JP NZ,PPAL2 + RET + +UPCOLOR: DB 0 + +PALET: LD HL,304 + LD DE,64 + LD A,(UPCOLOR) + LD B,42 ;168 pixels + LD C,A +PPAL12: PUSH BC + PUSH DE + PUSH HL + LD A,C + LD BC,8 + EXX + LD BC,4 + EXX + CALL RECTAN + POP HL + POP DE + INC DE + INC DE + INC DE + INC DE + POP BC + INC C + DJNZ PPAL12 + RET + +;;;; +GRID: LD HL,(X_) + INC HL + LD DE,(Y_) + LD BC,8 + EX DE,HL + ADD HL,BC + EX DE,HL + LD B,22 +GRID1: PUSH BC + PUSH HL + PUSH DE + LD A,BLACK + LD BC,304-SMSH-10 + CALL HRUBBER + POP HL + LD BC,8 + ADD HL,BC + EX DE,HL + POP HL + POP BC + DJNZ GRID1 +GRID2: LD HL,(X_) + LD DE,7 + ADD HL,DE + LD DE,(Y_) + LD B,32 +GRID3: PUSH BC + PUSH DE + PUSH HL + LD A,BLACK + LD BC,184 + CALL VRUBBER + POP HL + LD BC,8 + ADD HL,BC + POP DE + POP BC + DJNZ GRID3 + RET + +PUSHBUT: LD IX,RDIALOG + CALL GETPARM + JP BPUSH + +POPBUT: LD IX,RDIALOG + CALL GETPARM + JP BPOP + + +USERini: LD A,2 + SCF + RET + +;HL - X OFFSET +;DE - Y OFFSET +;BC - WIDTH + +AREAPIX: EQU #C000 + +PREV2X: DW 0 +PREV2Y: DW 0 +PREVX: DW 0 +PREVY: DW 0 +STARX: DW 0 +STARY: DW 0 + +X_: DW 5+MSH +Y_: DW 56 + +WIDTH_: DW 33*8 +HEIGHT_: DW 23*8 + +SHIFTX: DW 0 +SHIFTY: DW 0 + +ZOOM_X: DW 5+MSH +ZOOM_Y: DW 56 + +X_SIZE: DW 320 +Y_SIZE: DW 256 + +Y_LENB: DW 0 +X_LENB: DW 0 +Y_HGTB: DW 0 +X_HGTB: DW 0 + +DATAPIX: PUSH BC + LD (SHIFTX),HL + LD (SHIFTY),DE + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +DATPIX1: LD A,D + OR E + JR Z,DATPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR DATPIX1 +DATPIX2: LD HL,(ZOOM_X) + LD DE,(ZOOM_Y) + POP BC + LD A,23 +DATPIX3: PUSH AF + PUSH BC + PUSH HL + PUSH DE + PUSH IX + LD A,(XBANK) + PUSH AF + EXX + LD BC,(SHIFTX) + ADD IX,BC + CALL C,PIXNEXT + EXX + CALL COPY_L + POP AF + CALL PIXFIX + POP IX + LD BC,(X_SIZE) + ADD IX,BC + CALL C,PIXNEXT + POP DE + POP HL + POP BC + INC DE + POP AF + DEC A + JP NZ,DATPIX3 + CALL RETBANK + RET + +SADDR: DW 0 + +COPY_L: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + LD DE,#4040 + ADD HL,DE + LD (SADDR),HL + EX AF,AF' + LD D,XH + LD E,XL + EX DE,HL + PUSH BC + LD D,H + LD E,L + ADD HL,BC + JP C,CONER1 + LD H,D + LD L,E + LD DE,(SADDR) + LDIR + POP BC + EX DE,HL + LD XH,D + LD XL,E + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +CONER1: PUSH HL + LD A,L + LD L,C + LD C,A + LD A,H + LD H,B + LD B,A + AND A + SBC HL,BC + LD B,H + LD C,L + LD H,D + LD L,E + LD DE,(SADDR) + LDIR + CALL PIXNXT + POP BC + LD A,B + OR C + JR Z,CONER11 + LDIR + CALL PIXPRV +CONER11: POP BC + EX DE,HL + LD XH,D + LD XL,E + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +FULLPIX: PUSH BC + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +FULPIX1: LD A,D + OR E + JR Z,FULPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR FULPIX1 +FULPIX2: LD HL,(ZOOM_X) + LD DE,(ZOOM_Y) + POP BC + LD A,23*8 +FULPIX3: PUSH AF + PUSH BC + PUSH HL + PUSH DE + PUSH IX + LD A,(XBANK) + PUSH AF + EXX + LD BC,(SHIFTX) + ADD IX,BC + CALL C,PIXNEXT + EXX + CALL COPY_L + POP AF + CALL PIXFIX + POP IX + LD BC,(X_SIZE) + ADD IX,BC + CALL C,PIXNEXT + POP DE + POP HL + POP BC + INC DE + POP AF + DEC A + JP NZ,FULPIX3 + CALL RETBANK + RET + +SMSH: EQU MSH*2 + +RDIALOG: DW #0000 ;STYLE + DB 27 ;NUMBER ITEMS + DW 0 ;X + DW 0 ;Y + DW 320 ;CX + DW 256 ;CY + DW #0000 ;RESOURCE MENU BAR OR "0" ZERO + DB "2D Studio",0 ;CAPTION + +;CONTROL ITEM + DW 4+MSH ;X + DW 55 ;Y + DW 293-MSH ;CX + DW 186+8 ;CY + DW #2401 ;ID + DB LISTX ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 303 ;X + DW 55 ;Y + DW 10 ;CX + DW 186 ;CY + DW #CC00 ;ID + DB LISTX ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 304 ;X + DW 56 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0120 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 304 ;X + DW 56+184-8 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0121 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + +VSBA01: DW 293-MSH+4+10 ;X + DW 56 ;Y + DW 8 ;CX + DW 184 ;CY + DW #0601 ;ID + DB VSBAR ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 293-MSH+4+10 ;X + DW 56 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0602 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 293-MSH+4+10 ;X + DW 56+184-8 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0603 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + +HSBA01: DW 5+MSH ;X + DW 55+186-1 ;Y + DW 293-MSH-2-8 ;CX + DW 8 ;CY + DW #0701 ;ID + DB HSBAR ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 5+MSH ;X + DW 55+186-1 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0702 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 5+MSH+293-MSH-10-8 ;X + DW 55+186-1 ;Y + DW 8 ;CX + DW 8 ;CY + DW #0703 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 320-14 ;X + DW 4 ;Y + DW 10 ;CX + DW 10 ;CY + DW #0100 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,#0D,0 ;TEXT FOR ITEM + + DW 4 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0101 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,1,0 ;TEXT FOR ITEM + + DW 22 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0102 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,2,0 ;TEXT FOR ITEM + + DW 40 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0103 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,3,0 ;TEXT FOR ITEM + + DW 61 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0104 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,4,0 ;TEXT FOR ITEM + + DW 79 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0105 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,5,0 ;TEXT FOR ITEM + + DW 97 ;X + DW 34 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0106 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,6,0 ;TEXT FOR ITEM + +; DW 140 ;X +; DW 34 ;Y +; DW 16 ;CX +; DW 16 ;CY +; DW #0107 ;ID +; DB BUTTON ;TYPE ITEM #80-BUTTON +; DB "D",0 ;TEXT FOR ITEM + + DW 3 ;X + DW 56 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010A ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,9,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 74 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010B ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,12,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 92 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010C ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,10,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 110 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010D ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,11,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 128 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010E ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,8,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 146 ;Y + DW 18 ;CX + DW 18 ;CY + DW #010F ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB #FF,7,0 ;TEXT FOR ITEM + + DW 3 ;X + DW 164 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0110 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "G",0 ;TEXT FOR ITEM + + DW 3 ;X + DW 182 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0111 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "H",0 ;TEXT FOR ITEM + + DW 3 ;X + DW 200 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0108 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "-",0 ;TEXT FOR ITEM + + DW 3 ;X + DW 218 ;Y + DW 18 ;CX + DW 18 ;CY + DW #0109 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "+",0 ;TEXT FOR ITEM + + INCLUDE "2DS_DISK.ASM" + INCLUDE "SPRITE_.ASM" + +MAINM: + DB M_ITEM," File",0 + DW WFILE + DB M_ITEM," Edit",0 + DW WEDIT + DB M_ITEM," View",0 + DW WVIEW + DB M_ITEM," Image",0 + DW WIMAGE + DB M_ITEM," Tools",0 + DW WTOOLS + DB M_ITEM," Options",0 + DW WOPTION + DB #00 + +WFILE: DW 0,31 ; X Y + DW 70 ; SIZE + DB M_ITEM,"New",0 + DW #0101 + DB M_ITEM,"Open...",0 + DW #0102 + DB M_ITEM,"Save",0 + DW #0103 + DB M_ITEM,"Save as...",0 + DW #0104 + DB M_BAR + DB M_ITEM,"Print",0 + DW #0105 + DB M_BAR + + + DB M_ITEM,"Exit",0 + DW #0106 + DB M_END + +WEDIT: DW 26,31 ; X Y + DW 60 ; SIZE + DB M_ITEM,"Undo",0 + DW #0201 + DB M_ITEM,"Cut",0 + DW #0202 + DB M_ITEM,"Copy",0 + DW #0203 + DB M_ITEM,"Paste",0 + DW #0204 + DB M_ITEM,"Crop",0 + DW #0205 + DB M_ITEM,"Delete",0 + DW #0206 + DB M_ITEM,"Buffer...",0 + DW #0207 + DB M_BAR + DB M_ITEM,"Fill...",0 + DW #0208 + DB M_ITEM,"Flip...",0 + DW #0209 + DB M_ITEM,"Rotate...",0 + DW #020A + DB M_ITEM,"Resize...",0 + DW #020B + DB M_ITEM,"Slant...",0 + DW #020C + DB M_ITEM,"Outline",0 + DW #020D + DB M_END + +WVIEW: DW 52,31 ; X Y + DW 108 ; SIZE + DB M_ITEM,"Zoom in",0 + DW #0301 + DB M_ITEM,"Zoom out",0 + DW #0302 + DB M_ITEM,"Full Screen",0 + DW #0303 + DB M_BAR + DB M_ITEM,"Image Information",0 + DW #0304 + DB M_BAR + DB M_ITEM,"Tools Bar",0 + DW #0305 + DB M_ITEM,"Pallete",0 + DW #0306 + DB M_ITEM,"Status Line",0 + DW #0307 + DB M_END + +WIMAGE: DW 81,31 ; X Y + DW 60 ; SIZE + DB M_ITEM,"Invert",0 + DW #0401 + DB M_ITEM,"Resample",0 + DW #0402 + DB M_END + +WTOOLS: DW 116,31 ; X Y + DW 60 ; SIZE + DB M_ITEM,"Pen",0 + DW #0501 + DB M_ITEM,"Brush",0 + DW #0502 + DB M_ITEM,"Ellips",0 + DW #0503 + DB M_END + +WOPTION: DW 150,31 ; X Y + DW 60 ; SIZE + DB M_ITEM,"Empty",0 + DW #0601 + DB M_END +PRMBUFF: DB 0 + BLOCK 256,0 + +WN_FACE: + MODULE _INTERFACE_ + DISP #100 + INCLUDE "interface/face.asm" + ;INCLUDE "interface/face_alt.asm" + ENT + ENDMODULE +WN_FACE.Size EQU $ - WN_FACE diff --git a/2DS_DISK.ASM b/2DS_DISK.ASM new file mode 100644 index 0000000..748179d --- /dev/null +++ b/2DS_DISK.ASM @@ -0,0 +1,1431 @@ + +YSW EQU 3*8 +LDFILE + CALL RD_DIR + + LD HL,(FILES) + CALL SBMAX ;MAX VALUE + LD HL,16 + CALL SBWIN ;BIG ADDER + LD HL,0 + CALL SBVAL ;CURRENT VALUE + CALL SETNWIN + LD IX,OPNFDLG + LD HL,USErini + CALL DLGinit +AGAIN CALL WAITMSG + CALL USErwrk + JP AGAIN + +USErini LD A,H + CP #14 + JP Z,FILEBX + CP #16 + JP Z,SBARIN + LD A,2 + SCF + RET + + +SVFILE CALL RD_DIR + LD HL,(FILES) + CALL SBMAX ;MAX VALUE + LD HL,16 + CALL SBWIN ;BIG ADDER + LD HL,0 + CALL SBVAL ;CURRENT VALUE + CALL SETNWIN + LD IX,SAVFDLG + LD HL,USErini + CALL DLGinit +AGAINS CALL WAITMSG + CALL USEswrk + JP AGAINS + +FILEBX LD (SAVEIX),IX + CALL LST_INI + CALL PUTDIR + XOR A + RET + +POSS_Y DW 0 +POSS_X DW 0 + +PUTDIR LD HL,126 + LD DE,68+YSW + INC HL + INC DE + LD (POSS_Y),DE + LD (POSS_X),HL + CALL RSBVAL ;! + LD B,H ;! + LD C,L ;! + LD HL,#C000 + LD DE,#0020 +; LD BC,(SB_VAL) + INC BC + AND A + SBC HL,DE +SKIDRR ADD HL,DE + DEC BC + LD A,B + OR C + JP NZ,SKIDRR + LD B,16 +PUTDIR1 PUSH BC + CALL GETH + JP C,EGET + PUSH HL + LD HL,(POSS_X) + LD DE,(POSS_Y) +; LD A,(WTEXT_) + LD A,#F0 + CALL SBODY + EXX + LD HL,EXTITEM+2 + LD DE,EXTITEM+3 + LDD + LDD + LDD + XOR A + LD (DE),A + EXX + XOR A + LD (EXTITEM+4),A + LD BC,DIRITEM + CALL PCHARX + LD HL,(POSS_X) + LD DE,56 + ADD HL,DE + LD DE,(POSS_Y) + LD BC,EXTITEM+1 + CALL PCHARX + LD HL,(POSS_Y) + LD BC,8 + ADD HL,BC + LD (POSS_Y),HL + POP HL + POP BC + DJNZ PUTDIR1 + RET + +EGET POP BC + RET + +ADI LD BC,#0020 + ADD HL,BC + JP GETH1 + +GETH IN A,(#E2) + PUSH AF + LD A,DIRPAGE + OUT (#E2),A +GETH1 LD A,(HL) + OR A + JP Z,EDI + CP #E5 + JP Z,ADI + LD DE,DIRITEM + LD BC,#0020 + LDIR + POP AF + OUT (#E2),A + AND A + RET + +EDI POP AF + OUT (#E2),A + SCF + RET + +DIRITEM DB " " +EXTITEM DB " " + DW 0,0,0,0,0,0,0,0 + +SBARIN LD A,L + CP 1 + JR Z,ITSBR + XOR A + RET + +ITSBR LD (SAVEIX2),IX + LD A,2 + SCF + RET + +LOADF + LD C,3 + CALL INTMOUS + EX DE,HL + LD DE,68+YSW + AND A + SBC HL,DE + SRL H + RR L + SRL H + RR L + SRL H + RR L + EX DE,HL ;! + CALL RSBVAL ;! +; LD DE,(SB_VAL) + ADD HL,DE + LD A,L + OR A + LD HL,#C000 + JR Z,LF2 + LD B,A + LD DE,#0020 +LF1 ADD HL,DE + DJNZ LF1 +LF2 CALL GETH + LD A,0 + RET C +;;;;;;;; +; +; LD HL,DIRITEM +; CALL DEBUG +; +;;;;;;;; + LD A,(DIRITEM+11) + AND #10 + JP NZ,REDIR + CALL RD_FILE + CALL CONVERT + POP HL + RET + +;DEBUG +; LD B,H +; LD C,L +; LD HL,5 +; LD DE,5 +; CALL PCHARX +; RET + +REDIR + LD HL,DIRITEM + CALL CH_DIR + LD HL,(FILES) + CALL SBMAX ;MAX VALUE + LD HL,0 + CALL SBVAL ;CURRENT VALUE + LD IX,(SAVEIX) + CALL LST_CLR + LD IX,(SAVEIX2) + LD A,0 + CALL SBV_WRK + CALL PUTDIR + XOR A + RET + +SAVEF LD C,3 + CALL INTMOUS + EX DE,HL + LD DE,68+YSW + AND A + SBC HL,DE + SRL H + RR L + SRL H + RR L + SRL H + RR L + EX DE,HL ;! + CALL RSBVAL ;! +; LD DE,(SB_VAL) + ADD HL,DE + LD A,L + OR A + LD HL,#C000 + JR Z,SF2 + LD B,A + LD DE,#0020 +SF1 ADD HL,DE + DJNZ SF1 +SF2 CALL GETH + LD A,0 + RET C + LD A,(DIRITEM+11) + AND #10 + JP NZ,REDIR + CALL MAKEBMP + CALL SV_FILE + POP HL + RET + +USEswrk CP 3 + JP Z,PUS2_ + CP 4 + JP Z,UNPS_SV + CP 5 + JP Z,DRAG2_ + CP 6 + JP Z,DROP2_ + LD A,1 + RET + +UNPS_SV LD A,H + CP #11 + JP Z,UP_BT21 + CP #14 + JP Z,SVFI + CP #16 + JP Z,UPBARRS + LD A,2 + RET + + +SVFI LD A,L + CP 1 + JP Z,SAVEF + LD A,3 + RET + +UP_BT21 LD A,L + CP 1 + JP Z,UP_BT31 + CP 2 + JP Z,UP_BT32 + LD A,3 + RET + + +UP_BT31 CALL POPBOT + POP HL + XOR A + RET + +UP_BT32 CALL POPBOT + POP HL + XOR A + RET + +USErwrk CP 3 + JP Z,PUS2_ + CP 4 + JP Z,UNPUS2_ + CP 5 + JP Z,DRAG2_ + CP 6 + JP Z,DROP2_ + LD A,1 + RET + +DROP2_ LD A,H + CP #11 + JP Z,DROP2 + LD A,2 + RET + +DRAG2_ LD A,H + CP #11 + JP Z,DRAG2 + LD A,2 + RET + +PUS2_ LD A,H + CP #11 + JP Z,PBUTT2 + CP #12 + JP Z,EDBXX2 + CP #16 + JP Z,SSBBAR + LD A,2 + RET + +EDBXX2 LD A,L + CP 1 + JP Z,EDBXX1 + LD A,3 + RET + +EDBXX1 LD IX,OPNFDLG + CALL GETPARM + LD IX,SYSTEM1 + CALL EDITBOX + XOR A + RET + +SSBBAR LD A,L + CP 2 + JP Z,SBAR1 + CP 3 + JP Z,SBAR2 + LD A,3 + RET + +SBAR1 CALL PUSHBOT +SBB2 ;D HL,(SB_VAL) + CALL RSBVAL ;! + LD A,L + OR H + RET Z + DEC HL + CALL SBVAL ;! +; LD (SB_VAL),HL + LD IX,(SAVEIX) + CALL LST_CLR + LD IX,(SAVEIX2) + LD A,1 + CALL SBV_WRK + CALL PUTDIR + LD C,3 + CALL INTMOUS + CP 1 + JP Z,SBB2 + XOR A + RET + +SBAR2 CALL PUSHBOT +SBB1 CALL RSBVAL ;! + EX DE,HL ;! + INC DE + CALL RSBWIN ;! + LD B,H ;! + LD C,L ;! + CALL RSBMAX +; LD HL,(SB_MAX) +; LD BC,(SB_WIN) + AND A + SBC HL,BC + AND A + SBC HL,DE + LD A,0 + RET C + EX DE,HL + CALL SBVAL +; LD (SB_VAL),HL +SBAR0 LD IX,(SAVEIX) + CALL LST_CLR + LD IX,(SAVEIX2) + LD A,2 + CALL SBV_WRK + CALL PUTDIR + LD C,3 + CALL INTMOUS + CP 1 + JP Z,SBB1 + XOR A + RET + +UPBARRS LD A,L + CP 2 + JP Z,UPBAR1 + CP 3 + JP Z,UPBAR2 + LD A,3 + RET +UPBAR2 +UPBAR1 CALL POPBOT + XOR A + RET + +SAVEIX DW IX1 +SAVEIX2 DW IX2 + +UNPUS2_ LD A,H + CP #11 + JP Z,UPBUT21 + CP #14 + JP Z,LDFI + CP #16 + JP Z,UPBARRS + LD A,2 + RET + +PBUTT2 LD A,L + CP 1 + JP Z,PBUTT1A + CP 2 + JP Z,PBUTT2A + LD A,3 + RET + +LDFI LD A,L + CP 1 + JP Z,LOADF + LD A,3 + RET + +UPBUT21 LD A,L + CP 1 + JP Z,UPBUT31 + CP 2 + JP Z,UPBUT32 + LD A,3 + RET + +PBUTT1A CALL PUSHBOT + XOR A + RET + +PBUTT2A CALL PUSHBOT + XOR A + RET + +UPBUT31 CALL POPBOT + POP HL + XOR A + RET + +UPBUT32 CALL POPBOT + POP HL + XOR A + RET + +DROP2 LD A,L + CP 1 + JP Z,PUSHBOT + CP 2 + JP Z,PUSHBOT + LD A,3 + RET + +DRAG2 LD A,L + CP 1 + JP Z,POPBOT + CP 2 + JP Z,POPBOT + LD A,3 + RET + +PUSHBOT LD IX,OPNFDLG + CALL GETPARM + JP BPUSH + +POPBOT LD IX,OPNFDLG + CALL GETPARM + JP BPOP + +SYSTEM1 DB 64,0 + DS 64 + +OPNFDLG DW #0000 ;STYLE + DB 6 ;(7) ;NUMBER ITEMS + DW 120 ;X + DW 32+YSW ;Y + DW 96 ;CX + DW 192 ;CY + DW #0002 ;RESOURCE MENU BAR OR "0" ZERO + DB "Open",0 ;CAPTION + +;CONTROL ITEM + DW 8 ;X + DW 170 ;Y + DW 40 ;CX + DW 14 ;CY + DW #1101 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "Open",0 ;TEXT FOR ITEM + + DW 52 ;X + DW 170 ;Y + DW 40 ;CX + DW 14 ;CY + DW #1102 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "Cancel",0 ;TEXT FOR ITEM + +; DW 5 ;X +; DW 20 ;Y +; DW 80 ;CX +; DW 12 ;CY +; DW #1201 ;ID +; DB ED_BOX ;TYPE ITEM #80-BUTTON +; DB 0 ;TEXT FOR ITEM + +IX1 DW 5 ;X + DW 35 ;Y + DW 88 ;CX + DW 130 ;CY + DW #1401 ;ID + DB LISTX ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + +IX2 DW 93-9 ;X + DW 36 ;Y + DW 8 ;CX + DW 128 ;CY + DW #1601 ;ID + DB VSBAR ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 93-9 ;X + DW 36 ;Y + DW 8 ;CX + DW 8 ;CY + DW #1602 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 93-9 ;X + DW 36+128-8 ;Y + DW 8 ;CX + DW 8 ;CY + DW #1603 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + +SAVFDLG DW #0000 ;STYLE + DB 6 ;(7) ;NUMBER ITEMS + DW 120 ;X + DW 32+YSW ;Y + DW 96 ;CX + DW 192 ;CY + DW #0003 ;RESOURCE MENU BAR OR "0" ZERO + DB "Save as",0 ;CAPTION + +;CONTROL ITEM + DW 8 ;X + DW 170 ;Y + DW 40 ;CX + DW 14 ;CY + DW #1101 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "Save",0 ;TEXT FOR ITEM + + DW 52 ;X + DW 170 ;Y + DW 40 ;CX + DW 14 ;CY + DW #1102 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB "Cancel",0 ;TEXT FOR ITEM + +; DW 5 ;X +; DW 20 ;Y +; DW 80 ;CX +; DW 12 ;CY +; DW #1201 ;ID +; DB ED_BOX ;TYPE ITEM #80-BUTTON +; DB 0 ;TEXT FOR ITEM + +IX12 DW 5 ;X + DW 35 ;Y + DW 88 ;CX + DW 130 ;CY + DW #1401 ;ID + DB LISTX ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + +IX22 DW 93-9 ;X + DW 36 ;Y + DW 8 ;CX + DW 128 ;CY + DW #1601 ;ID + DB VSBAR ;TYPE ITEM #80-BUTTON + DB #00 ;ARRAY + + DW 93-9 ;X + DW 36 ;Y + DW 8 ;CX + DW 8 ;CY + DW #1602 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + + DW 93-9 ;X + DW 36+128-8 ;Y + DW 8 ;CX + DW 8 ;CY + DW #1603 ;ID + DB BUTTON ;TYPE ITEM #80-BUTTON + DB 0 ;TEXT FOR ITEM + +;---------------------------------------- +AREApix EQU #C000 +CONVERT DI + LD C,#93 + LD A,#0E + CALL IPOINT ;CLEAR "S" +; LD C,#93 +; LD A,#0D +; CALL IPOINT ;CLEAR "R" +;; LD BC,#0592 +;; LD A,#0E +;; CALL IPOINT ;CREATE "S" +; LD BC,#0592 +; LD A,#0D +; CALL IPOINT ;CREATE "R" + LD BC,#0094 + LD HL,FLEPAGE +SL2PAGE LD A,#0D + PUSH HL + PUSH BC + CALL IPOINT ;GET PAGES + POP BC + POP HL + LD (HL),A + INC A + JR Z,EDP001 + INC HL + INC B + LD A,#81 + CP B + JP NZ,SL2PAGE +EDP001 LD C,#92 + LD A,#0E + CALL IPOINT ;CREATE "S" + LD BC,#0094 + LD HL,PIXPAGE +SL3PAGE LD A,#0E + PUSH HL + PUSH BC + CALL IPOINT ;GET PAGES + POP BC + POP HL + LD (HL),A + INC A + JR Z,EDP002 + INC HL + INC B + LD A,#81 + CP B + JP NZ,SL3PAGE +EDP002 CALL TURNBMP + LD HL,NEWPAL + LD DE,#0000 ;! EE (00) AMOUNT COLORS + LD BC,#FFA4 + LD A,1 ;PALETTE FOR MODE 8(!) + CALL IPOINT ;SET PALETTE + EI + AND A + RET + +FLEBANK DB #00 + +pixBANK DB #00 + +FLEPAGE DS #80 + +;PIXPAGE DS #80 + +pixOPEN XOR A + PUSH BC + PUSH HL + LD (pixBANK),A + LD C,A + LD B,0 + IN A,(PAGE3) + LD (retBANK+1),A + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +pixNEXT PUSH BC + PUSH HL + LD A,(pixBANK) + INC A + LD (pixBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + SET 7,H + SET 6,H + RET + +pixPREV PUSH BC + PUSH HL + LD A,(pixBANK) + DEC A + LD (pixBANK),A + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + SET 7,H + SET 6,H + RET + +pixCURR PUSH BC + PUSH HL + LD A,(pixBANK) + LD C,A + LD B,0 + LD HL,PIXPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +FLEOPEN XOR A + PUSH BC + PUSH HL + LD (FLEBANK),A + LD C,A + LD B,0 + IN A,(PAGE3) + LD (retBANK+1),A + LD HL,FLEPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +FLENEXT PUSH BC + PUSH HL + LD A,(FLEBANK) + INC A + LD (FLEBANK),A + LD C,A + LD B,0 + LD HL,FLEPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + SET 7,H + SET 6,H + RET + +FLEPREV PUSH BC + PUSH HL + LD A,(FLEBANK) + DEC A + LD (FLEBANK),A + LD C,A + LD B,0 + LD HL,FLEPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + LD A,XH + OR #C0 + LD XH,A + SET 7,H + SET 6,H + RET + +FLECURR PUSH BC + PUSH HL + LD A,(FLEBANK) + LD C,A + LD B,0 + LD HL,FLEPAGE + ADD HL,BC + LD A,(HL) + OUT (PAGE3),A + POP HL + POP BC + RET + +retBANK LD A,#00 + OUT (PAGE3),A + RET + +TURNBMP LD IX,AREApix + CALL FLEOPEN + LD A,(IX+00) + CP "B" +; RET NZ + JP NZ,retBANK + LD A,(IX+01) + CP "M" +; RET NZ + JP NZ,retBANK + +;HL'- IMAGE_OFFSET +;DE'- SIZE_HEADER +;BC'- HEIGHT +;BC - WIDTH +;HL - +; D - COLOR_USED +; E - BIT_COUNT + + EXX + LD HL,40 ;SIZE_WINDOW 3.1 HEADER + LD E,(IX+14) ;SIZE_HEADER + LD D,(IX+15) + AND A + SBC HL,DE + JP NZ,OS2BMP + LD HL,14 ;SIZE_FILE_HEADER + ADD HL,DE + EX DE,HL + PUSH DE + LD E,(IX+02) ; SIZE FILE + LD D,(IX+03) + LD C,(IX+04) + LD B,(IX+05) + LD (FLSIZE),DE + LD (FHSIZE),BC + LD L,(IX+10) ; IMAGE OFFSET + LD H,(IX+11) + LD (OFFSET),HL + LD C,(IX+18) ;WIDTH + LD B,(IX+19) + LD (X_SIZE),BC + LD C,(IX+22) ;HEIGHT + LD B,(IX+23) + LD (Y_SIZE),BC + + POP DE + LD L,(IX+10) ;IMAGE_OFFSET + LD H,(IX+11) + EXX + LD C,(IX+18) ;WIDTH + LD B,(IX+19) +; LD A,(IX+20) ;HIGH +; LD A,(IX+21) + EXX + LD C,(IX+22) ;HEIGHT + LD B,(IX+23) +; LD A,(IX+24) ;HIGH +; LD A,(IX+25) + EXX +; LD A,(IX+26) ;PLANES +; LD A,(IX+27) + LD E,(IX+28) ;BIT_COUNT +; LD A,(IX+29) + +; LD A,(IX+30) ;COMPRESSION +; LD A,(IX+31) +; LD A,(IX+32) +; LD A,(IX+33) + +; LD E,(IX+34) ;SIZE_IMAGE(COMPRESSION) +; LD D,(IX+35) +; LD A,(IX+36) +; LD A,(IX+37) + +; LD A,(IX+38) ;X_PELS_PER_METER +; LD A,(IX+39) +; LD A,(IX+40) +; LD A,(IX+41) + +; LD A,(IX+42) ;Y_PELS_PER_METER +; LD A,(IX+43) +; LD A,(IX+44) +; LD A,(IX+45) + + LD D,(IX+46) ;COLOR_USED +; LD A,(IX+47) +; LD A,(IX+48) +; LD A,(IX+49) + +; LD A,(IX+50) ;COLOR_IMPORTANT +; LD A,(IX+51) +; LD A,(IX+52) +; LD A,(IX+53) + PUSH IX + EXX + ADD IX,DE ;SKIP BITMAP HEADER + EXX + PUSH IX + POP HL ;HL - PALETTE (B/G/R/0) + EXX + POP IX + EX DE,HL + ADD IX,DE ;IX - OUTSET IMAGE + EXX + INC D ; D - COLOR_USED + DEC D + LD A,E ; A - BIT_COUNT + JP NZ,USCOLOR + LD D,16 ;IF COLOR_USED = 0 THEN +; CP 4 ;USED ALL COLOR +; JP Z,USCOLOR ;16 COLORS ? + LD D,0 ;(256) + CP 8 + JP Z,USCOLOR ;256 COLORS ? + LD A,#04 +; LD (VDI_ERR),A + SCF + RET + +USCOLOR PUSH BC ;PUSH WIDTH + PUSH AF ;A - BIT_COUNT + PUSH IX + +;Install File Palette +; PUSH HL +; LD E,0 +; LD BC,#FFA4 +; LD A,0 ;PALETTE FOR MODE 8(!) +; CALL #3D13 ;SET PALETTE +; POP HL + LD DE,NEWPAL + LD BC,256*4 + LDIR + POP IX ;POP OUTSET IMAGE + POP AF + POP BC +; CP 4 +; JP Z,BMP16 + CP 8 + JP BMP256 + +OS2BMP LD A,#05 +; LD (VDI_ERR),A + SCF + RET + +REAL256 PUSH BC + LD A,C + AND #03 + JR Z,BM25602 + LD A,C + AND #FC + ADD A,4 + LD C,A + JR NC,BM25602 + INC B +BM25602 LD (RL_SIZE),BC + POP BC + RET + +RL_SIZE DW 0 + +;IX - IMAGE +;BC - WIDTH +;BC'- HEIGHT + +BMP256 CALL REAL256 + EXX + PUSH BC + EXX + LD D,XH + LD E,XL + EX DE,HL + POP DE + PUSH BC + LD BC,(RL_SIZE) +BMP256A DEC DE + LD A,D + OR E + JR Z,BMP256B + ADD HL,BC + JP NC,BMP256A + CALL FLENEXT + JP BMP256A +BMP256B CALL retBANK + CALL pixOPEN + LD DE,AREApix +BMP256C POP BC + PUSH HL + PUSH DE + CALL READST + POP DE + CALL WRITEST + POP HL + PUSH BC + LD BC,(RL_SIZE) + AND A + SBC HL,BC + BIT 6,H + CALL Z,FLEPREV + EXX + DEC BC + LD A,B + OR C + EXX + JP NZ,BMP256C + POP BC + CALL retBANK + AND A + RET + +; FROM HL + +READST CALL FLECURR + PUSH BC + LD D,H + LD E,L + ADD HL,BC + JP C,DOUBLE + LD H,D + LD L,E + LD DE,STBUFF + LDIR + POP BC + CALL retBANK + RET + +DOUBLE PUSH HL + LD A,L + LD L,C + LD C,A + LD A,H + LD H,B + LD B,A + AND A + SBC HL,BC + LD B,H + LD C,L + LD H,D + LD L,E + LD DE,STBUFF + LDIR + CALL FLENEXT + POP BC + LD A,B + OR C + JR Z,ROVNO + LDIR + CALL FLEPREV +ROVNO POP BC + CALL retBANK + RET + +; TO DE + +WRITEST CALL pixCURR + PUSH BC + LD H,D + LD L,E + ADD HL,BC + JP C,DOUBLE2 + LD HL,STBUFF + LDIR + POP BC + CALL retBANK + RET + +DOUBLE2 PUSH HL + LD A,L + LD L,C + LD C,A + LD A,H + LD H,B + LD B,A + AND A + SBC HL,BC + LD B,H + LD C,L + LD HL,STBUFF + LDIR + EX DE,HL + CALL pixNEXT + EX DE,HL + POP BC + LD A,B + OR C + JR Z,ROVNO2 + LDIR +ROVNO2 POP BC + CALL retBANK + RET + +;--------------------------------- + +MAKEBMP DI +; LD C,#93 +; LD A,#0E +; CALL IPOINT ;CLEAR "S" + LD C,#93 + LD A,#0D + CALL IPOINT ;CLEAR "R" +; LD BC,#0592 +; LD A,#0E +; CALL IPOINT ;CREATE "S" + + LD HL,(FLSIZE) + LD (SIZE0),HL + LD HL,(FHSIZE) + LD (SIZE1),HL + CALL MEM_CLK + +; LD BC,#0592 +; LD A,#0D +; CALL IPOINT ;CREATE "R" + + LD BC,#0094 + LD HL,PIXPAGE +SLXPAGE LD A,#0E + PUSH HL + PUSH BC + CALL IPOINT ;GET PAGES + POP BC + POP HL + LD (HL),A + INC HL + INC B + LD A,5 + CP B + JP NZ,SLXPAGE + LD BC,#0094 + LD HL,FLEPAGE +SX2PAGE LD A,#0D + PUSH HL + PUSH BC + CALL IPOINT ;GET PAGES + POP BC + POP HL + LD (HL),A + INC HL + INC B +; LD A,5 +; CP B + CP #FF + JP NZ,SX2PAGE + CALL RE_TURN + AND A + EI + RET + +RE_TURN LD IX,AREApix + CALL FLEOPEN + LD A,"B" + LD (IX+00),A ; MAGIC "BM" ID + LD A,"M" + LD (IX+01),A ; + XOR A + LD DE,(FLSIZE) + LD BC,(FHSIZE) + LD (IX+02),E ; SIZE FILE + LD (IX+03),D + LD (IX+04),C + LD (IX+05),B + LD (IX+06),A ; RESERVED + LD (IX+07),A + LD (IX+08),A + LD (IX+09),A + LD HL,(OFFSET) + LD (IX+10),L ; IMAGE OFFSET + LD (IX+11),H + LD (IX+12),A + LD (IX+13),A + LD DE,40 ;SIZE_WINDOW 3.1 HEADER + LD (IX+14),E ;SIZE_HEADER + LD (IX+15),D + LD (IX+16),A + LD (IX+17),A + LD BC,(X_SIZE) + PUSH BC + LD (IX+18),C ;WIDTH + LD (IX+19),B + LD (IX+20),A ;HIGH + LD (IX+21),A + LD BC,(Y_SIZE) + PUSH BC + LD (IX+22),C ;HEIGHT + LD (IX+23),B + LD (IX+24),A ;HIGH + LD (IX+25),A + LD DE,1 + LD (IX+26),E ;PLANES + LD (IX+27),D + LD DE,8 + LD (IX+28),E ;BIT_COUNT + LD (IX+29),D + + LD (IX+30),A ;COMPRESSION + LD (IX+31),A + LD (IX+32),A + LD (IX+33),A + + LD (IX+34),A ;SIZE_IMAGE(COMPRESSION) + LD (IX+35),A + LD (IX+36),A + LD (IX+37),A + + LD (IX+38),A ;X_PELS_PER_METER + LD (IX+39),A + LD (IX+40),A + LD (IX+41),A + + LD (IX+42),A ;Y_PELS_PER_METER + LD (IX+43),A + LD (IX+44),A + LD (IX+45),A + LD DE,0 + LD (IX+46),E ;COLOR_USED + LD (IX+47),D + LD (IX+48),A + LD (IX+49),A + + LD (IX+50),A ;COLOR_IMPORTANT + LD (IX+51),A + LD (IX+52),A + LD (IX+53),A + LD D,XH + LD E,XL + LD HL,54 + ADD HL,DE + EX DE,HL + LD HL,NEWPAL + LD BC,1024 + LDIR + EXX + POP BC + EXX + POP BC + +;DE - IMAGE PLACE +;BC - WIDTH +;BC'- HEIGHT + + CALL REAL256 + EXX + PUSH BC + LD HL,STBUFF + LD DE,STBUFF+1 + LD BC,(RL_SIZE) + LD (HL),0 + LDIR + POP BC + PUSH BC + EXX + EX DE,HL + POP DE + PUSH HL + CALL retBANK + CALL pixOPEN + LD HL,AREApix +BMP256Z DEC DE + LD A,D + OR E + JR Z,BMP256Y + ADD HL,BC + JP NC,BMP256Z + CALL pixNEXT + JP BMP256Z +BMP256Y CALL retBANK + CALL FLEOPEN + POP DE +BMP256X PUSH BC + PUSH HL + PUSH DE + CALL READS2 + POP DE + LD BC,(RL_SIZE) + CALL WRITES2 + POP HL + POP BC + AND A + SBC HL,BC + BIT 6,H + CALL Z,pixPREV + EXX + DEC BC + LD A,B + OR C + EXX + JP NZ,BMP256X + CALL retBANK + AND A + RET + +; FROM HL + +READS2 CALL pixCURR + PUSH BC + LD D,H + LD E,L + ADD HL,BC + JP C,DOUBLE3 + LD H,D + LD L,E + LD DE,STBUFF + LDIR + POP BC + CALL retBANK + RET + +DOUBLE3 PUSH HL + LD A,L + LD L,C + LD C,A + LD A,H + LD H,B + LD B,A + AND A + SBC HL,BC + LD B,H + LD C,L + LD H,D + LD L,E + LD DE,STBUFF + LDIR + POP BC + LD A,B + OR C + JR Z,ROVNO3 + CALL pixNEXT + LDIR + CALL pixPREV +ROVNO3 POP BC + CALL retBANK + RET + + +; TO DE + +WRITES2 CALL FLECURR + PUSH BC + LD H,D + LD L,E + ADD HL,BC + JP C,DOUBLE4 + LD HL,STBUFF + LDIR + POP BC + CALL retBANK + RET + +DOUBLE4 PUSH HL + LD A,L + LD L,C + LD C,A + LD A,H + LD H,B + LD B,A + AND A + SBC HL,BC + LD B,H + LD C,L + LD HL,STBUFF + LDIR + EX DE,HL + CALL FLENEXT + EX DE,HL + POP BC + LD A,B + OR C + JR Z,ROVNO4 + LDIR +ROVNO4 POP BC + CALL retBANK + RET + +FLSIZE DW 0 +FHSIZE DW 0 + +OFFSET DW 1024+54 + +STBUFF DS 1024 + +NEWPAL DS 256*4 + + INCLUDE "WINDOS2.ASM" \ No newline at end of file diff --git a/GRAFOPEN.ASM b/GRAFOPEN.ASM new file mode 100644 index 0000000..357bcbc --- /dev/null +++ b/GRAFOPEN.ASM @@ -0,0 +1,60 @@ + +APOINT EQU 8 ;#3D13 +GO DI + LD IX,TAB00 + LD HL,#0000 + LD E,1 + LD C,#B0 + CALL APOINT + LD IX,TAB01 + LD HL,#0703 + LD E,1 + LD C,#B0 + CALL APOINT + LD IX,TAB02 + LD HL,#0826 + LD E,1 + LD C,#B0 + CALL APOINT + LD IX,TAB03 + LD HL,#0000 + LD E,1 + LD C,#B0 + CALL APOINT + LD IX,TAB04 + LD HL,#0000 + LD E,1 + LD C,#B0 + CALL APOINT + RET + +TAB00 DEFB 40,32,#00,#00,#20,#00,#08,#00 +TAB01 DEFB 33,23,#03,#07,#60,#00,#0B,#07 +TAB02 DEFB 01,21,038,#08,#60,#00,046,#08 + +TAB03 DEFB 08,02,028,#04,#60,#00,#24,#04 +TAB04 DEFB 02,02,037,#04,#60,#00,#2D,#04 + +NORTAB DEFB 12,23,#0F,#07,#20,#00,#17,#07 +SECTAB DEFB 12,23,#0F,#07,#60,#00,#17,#07 + +SETNWIN DI + LD IX,NORTAB + LD HL,#0F07 + LD E,1 + LD C,#B0 + CALL IPOINT + EI + RET + +SETAWIN DI + LD IX,SECTAB + LD HL,#0F07 + LD E,1 + LD C,#B0 + CALL IPOINT + EI + RET + + + diff --git a/INTERFACE/DLG.ASM b/INTERFACE/DLG.ASM new file mode 100644 index 0000000..990f99c --- /dev/null +++ b/INTERFACE/DLG.ASM @@ -0,0 +1,1327 @@ + +LOCK_X DEFW 0 +LOCK_Y DEFW 0 +LOCK_CX DEFW 0 +LOCK_CY DEFW 0 + +MAIN_CX DEFW 0 +MAIN_CY DEFW 0 + +G EQU GRAY +K EQU RED +T EQU BRED +U EQU WHITE +J EQU BLACK + +RDB_BMP DEFB G,J,J,J,J,G,G + DEFB J,J,G,G,G,J,G + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB G,J,G,G,G,U,U + DEFB G,G,U,U,U,U,G + +RDB2BMP DEFB G,J,J,J,J,G,G + DEFB J,J,G,G,G,J,G + DEFB J,G,U,U,J,G,U + DEFB J,G,U,G,J,G,U + DEFB J,G,J,J,J,G,U + DEFB G,J,G,G,G,U,U + DEFB G,G,U,U,U,U,G + +CHE_BMP DEFB J,J,J,J,J,J,U + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB J,G,G,G,G,G,U + DEFB U,U,U,U,U,U,U + +CHE2BMP DEFB J,J,J,J,J,J,U + DEFB J,G,G,G,G,G,U + DEFB J,G,U,U,J,G,U + DEFB J,G,U,G,J,G,U + DEFB J,G,J,J,J,G,U + DEFB J,G,G,G,G,G,U + DEFB U,U,U,U,U,U,U + +SBU_BMP DEFB U,U,U,U,U,U,U,J + DEFB U,G,G,G,G,G,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,G,G,G,G,G,J + DEFB J,J,J,J,J,J,J,J + +SBD_BMP DEFB U,U,U,U,U,U,U,J + DEFB U,G,G,G,G,G,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,G,J,J,G,G,J + DEFB U,G,G,G,G,G,G,J + DEFB J,J,J,J,J,J,J,J + +SBU_BMA DEFB J,J,J,J,J,J,J,J + DEFB J,G,G,G,G,G,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,G,G,G,G,G,U + DEFB J,U,U,U,U,U,U,U + +SBD_BMA DEFB J,J,J,J,J,J,J,J + DEFB J,G,G,G,G,G,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,G,J,J,G,G,U + DEFB J,G,G,G,G,G,G,U + DEFB J,U,U,U,U,U,U,U + +SBL_BMP DEFB U,U,U,U,U,U,U,J + DEFB U,G,G,G,G,G,G,J + DEFB U,G,G,J,G,G,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,G,J,G,G,G,J + DEFB U,G,G,G,G,G,G,J + DEFB J,J,J,J,J,J,J,J + +SBR_BMP DEFB U,U,U,U,U,U,U,J + DEFB U,G,G,G,G,G,G,J + DEFB U,G,G,G,J,G,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,J,J,J,J,G,J + DEFB U,G,G,G,J,G,G,J + DEFB U,G,G,G,G,G,G,J + DEFB J,J,J,J,J,J,J,J + +SBL_BMA DEFB J,J,J,J,J,J,J,J + DEFB J,G,G,G,G,G,G,U + DEFB J,G,G,J,G,G,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,G,J,G,G,G,U + DEFB J,G,G,G,G,G,G,U + DEFB J,U,U,U,U,U,U,U + +SBR_BMA DEFB J,J,J,J,J,J,J,J + DEFB J,G,G,G,G,G,G,U + DEFB J,G,G,G,J,G,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,J,J,J,J,G,U + DEFB J,G,G,G,J,G,G,U + DEFB J,G,G,G,G,G,G,U + DEFB J,U,U,U,U,U,U,U + + +BUTTON EQU #80 +ED_BOX EQU #81 +STATIC EQU #82 +LISTX EQU #83 +VSBAR EQU #84 +HSBAR EQU #85 +CH_BOX EQU #86 +RD_BUTT EQU #87 +GROUP EQU #88 + +GETPARM LD B,(IX+2) + INC IX + INC IX + INC IX + PUSH BC + PUSH HL + LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + LD (MAIN_X),HL + LD (MAIN_Y),DE + LD (MAIN_CX),BC + EXX + LD C,(IX+6) + LD B,(IX+7) + LD (MAIN_CY),BC + POP DE + EXX + LD D,XH + LD E,XL + LD HL,10 + ADD HL,DE + LD BC,#0100 + LD A,C + CPIR + EX DE,HL + LD XH,D + LD XL,E + POP BC +GPRM1 PUSH BC + EXX + LD L,(IX+8) + LD H,(IX+9) + AND A + SBC HL,DE + EXX + JP NZ,GPRM2 + POP BC + LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + AND A + RET + +GPRM2 CALL ITEM_NX + POP BC + DJNZ GPRM1 + SCF + RET + +DLGclos LD B,(IX+2) + INC IX + INC IX + INC IX + LD L,(IX+8) + LD H,(IX+9) + PUSH HL + PUSH BC + LD D,XH + LD E,XL + LD HL,10 + ADD HL,DE + LD BC,#0100 + LD A,C + CPIR + EX DE,HL + LD XH,D + LD XL,E + POP BC +DCLO1 PUSH BC + LD L,(IX+8) + LD H,(IX+9) + CALL LDESTR + JP C,DCLO2 + CALL ITEM_NX + POP BC + DJNZ DCLO1 + LD HL,#0000 + CALL LDESTR + LD HL,#0002 + CALL LDESTR + POP HL + CALL DESTR + AND A + RET + +DCLO2 POP BC + POP HL + AND A + RET + +RTDIAL DEFW 0 + +DLGopen INC IX + INC IX + INC IX + LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + LD (MAIN_X),HL + LD (WIN_X),HL + LD (MAIN_Y),DE + LD (WIN_Y),DE + LD (MAIN_CX),BC + LD L,(IX+6) + LD H,(IX+7) + LD (MAIN_CY),HL + LD L,(IX+8) + LD H,(IX+9) + AND A + RET + + +DLGinit LD (RTDIAL),IX + LD (USERINI+1),HL + LD B,(IX+2) + PUSH BC + CALL AWIN + LD D,XH + LD E,XL + LD HL,10 + ADD HL,DE + CALL CAPTION + EX DE,HL + LD XL,E + LD XH,D + LD HL,(MAIN_X) + LD (WIN_X),HL + LD HL,(MAIN_Y) + LD (WIN_Y),HL + POP BC +ITMCYC3 PUSH BC + LD L,(IX+8) + LD H,(IX+9) + LD A,(IX+10) +USERINI CALL USERini + LD HL,ITMCYC2 + PUSH HL + OR A + RET Z + LD A,(IX+10) + CP BUTTON + JP Z,BUT_INI + CP ED_BOX + JP Z,EDB_INI + CP CH_BOX + JP Z,CHB_INI + CP RD_BUTT + JP Z,RDB_INI + CP LISTX + JP Z,LST_INI + CP VSBAR + JP Z,SBV_INI + CP HSBAR + JP Z,SBH_INI + CP STATIC + JP Z,STC_INI + CP GROUP + JP Z,GRP_INI + POP HL +ITMCYC2 CALL ITEM_NX + POP BC + DJNZ ITMCYC3 + AND A + RET + +AWIN INC IX + INC IX + INC IX + LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + LD (MAIN_X),HL + LD (MAIN_Y),DE + LD (MAIN_CX),BC + EXX + LD C,(IX+6) + LD B,(IX+7) + LD (MAIN_CY),BC + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL CONST + CALL RESTRG + LD HL,0 + LD DE,0 + CALL OPTIMIZ + LD HL,#0000 + CALL LCONST + CALL RESTRG + LD A,(WINDOW_) + LD (BODY),A + JP PLANE + +CAPTION PUSH HL + LD BC,12 + EXX + LD HL,(MAIN_CX) + LD BC,6 + AND A + SBC HL,BC + LD B,H + LD C,L + LD HL,(MAIN_X) + INC HL + INC HL + INC HL + LD DE,(MAIN_Y) + INC DE + INC DE + INC DE + CALL SAVERG + LD HL,2 + LD DE,2 + CALL OPTIMIZ + LD HL,#0002 + CALL LCONST + CALL RESTRG + LD A,(ACAPT_) + LD (BODY),A + CALL PLACE + POP DE + PUSH DE + CALL LENSTR + LD HL,(MAIN_CX) + AND A + SBC HL,BC + SRL H + RR L + LD DE,(MAIN_X) + ADD HL,DE + EX DE,HL + LD HL,(MAIN_Y) + LD BC,6 + ADD HL,BC + EX DE,HL + LD A,(CTEXT_) + LD (BODY),A + POP BC + JP PCHARX + +BUT_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + JP PBUTTON + +LST_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + JP PLIST + +LST_CLR LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + JP PLIST + + +EDB_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + JP PEDITOR + +CHB_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + XOR A + JP PCHECK + +RDB_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + XOR A + JP RDBUTT + +STC_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + JP PSTATIC + +SBV_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + CALL SAVERG + CALL INITBAR + CALL RESTRG + LD (USOBJ_X),HL + LD (USOBJ_Y),DE + PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + PUSH HL + PUSH DE + LD A,(WINDOW_) + LD (BODY),A + CALL PLACE + POP DE + POP HL + PUSH IX + LD IX,SBU_BMP + LD BC,#0808 + CALL SPR_256 + LD BC,(SB_LEN) + EXX + LD DE,(SB_LEN) + LD HL,(SB_VAL) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD DE,(LOCK_Y) + LD BC,8 + ADD HL,BC + ADD HL,DE + EX DE,HL + LD HL,(LOCK_X) + LD BC,(LOCK_CX) + CALL PLANE + LD HL,(LOCK_Y) + LD BC,(LOCK_CY) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + EX DE,HL + LD HL,(LOCK_X) + LD IX,SBD_BMP + LD BC,#0808 + CALL SPR_256 + POP IX + LD HL,(USOBJ_X) + LD DE,(USOBJ_Y) + LD BC,8 + EXX + LD BC,8 + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + INC L + CALL LCONST + CALL RESTRG + EX DE,HL + LD BC,(LOCK_CY) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + EX DE,HL + LD BC,8 + EXX + LD BC,8 + EXX + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + INC L + INC L + CALL LCONST + AND A + RET + +SBH_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + CALL LCONST + CALL RESTRG + CALL SAVERG + CALL INITBAH + CALL RESTRG + LD (USOBJ_X),HL + LD (USOBJ_Y),DE + PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + PUSH HL + PUSH DE + LD A,(WINDOW_) + LD (BODY),A + CALL PLACE + POP DE + POP HL + PUSH IX + LD IX,SBL_BMP + LD BC,#0808 + CALL SPR_256 + LD BC,(LOCK_CY) + EXX + LD DE,(SB_LEN) + LD HL,(SB_VAL) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD DE,(LOCK_X) + LD BC,8 + ADD HL,BC + ADD HL,DE + LD DE,(LOCK_Y) + LD BC,(SB_LEN) + CALL PLANE + LD HL,(LOCK_X) + LD BC,(LOCK_CX) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + LD DE,(LOCK_Y) + LD IX,SBR_BMP + LD BC,#0808 + CALL SPR_256 + POP IX + LD HL,(USOBJ_X) + LD DE,(USOBJ_Y) + LD BC,8 + EXX + LD BC,8 + EXX + CALL SAVERG + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + INC L + CALL LCONST + CALL RESTRG + LD BC,(LOCK_CX) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + LD BC,8 + EXX + LD BC,8 + EXX + CALL OPTIMIZ + LD L,(IX+8) + LD H,(IX+9) + INC L + INC L + CALL LCONST + AND A + RET + +GRP_INI LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + JP PGROUP + +PGROUP PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + JP DFRAME + +PSTATIC PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + CALL ITEM_TX + LD B,H + LD C,L + LD HL,(LOCK_X) + INC HL + INC HL + INC HL + LD DE,(LOCK_Y) + INC DE + INC DE + LD A,(WTEXT_) + LD (BODY),A + JP PCHARX + +PLIST PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + LD A,(WRKSPC_) + LD (BODY),A + CALL PLACE + RET + +PCHECK PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + LD BC,#0707 + PUSH IX + OR A + LD IX,CHE_BMP + JR Z,OFFCH2 + LD IX,CHE2BMP +OFFCH2 CALL SPR_256 + POP IX + CALL ITEM_TX + PUSH HL + LD HL,(LOCK_X) + LD BC,12 + ADD HL,BC + LD DE,(LOCK_Y) + LD A,(WTEXT_) + LD (BODY),A + POP BC + JP PCHARX + +RDBUTT PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + LD BC,#0707 + PUSH IX + OR A + LD IX,RDB_BMP + JR Z,OFFCH + LD IX,RDB2BMP +OFFCH CALL SPR_256 + POP IX + CALL ITEM_TX + PUSH HL + LD HL,(LOCK_X) + LD BC,12 + ADD HL,BC + LD DE,(LOCK_Y) + LD A,(WTEXT_) + LD (BODY),A + POP BC + JP PCHARX + +PEDITOR PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + LD A,(WRKSPC_) + LD (BODY),A + CALL PLACE + RET + +PBUTTON PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + LD A,(BUTTON_) + LD (BODY),A + CALL PLANE + CALL ITEM_TX + EX DE,HL + LD A,(DE) + INC A + JP Z,BSPRITE + PUSH DE + CALL LENSTR + LD HL,(LOCK_CX) + AND A + SBC HL,BC + SRL H + RR L + LD DE,(LOCK_X) + ADD HL,DE + EX DE,HL + LD HL,(LOCK_CY) + LD BC,6 + AND A + SBC HL,BC + SRL H + RR L + LD BC,(LOCK_Y) + ADD HL,BC + EX DE,HL + POP BC + LD A,(BTEXT_) + LD (BODY),A + JP PCHARX + +BSPRITE INC DE + LD A,(DE) +BSPRADR LD HL,#C000 + LD BC,0 +BSPR1 ADD HL,BC + LD C,(HL) + INC HL + LD B,(HL) + DEC HL + DEC A + JP NZ,BSPR1 + INC HL + INC HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD A,C + PUSH IX + PUSH HL + LD HL,(LOCK_CX) + AND A + SBC HL,BC + SRL H + RR L + LD DE,(LOCK_X) + ADD HL,DE + EX DE,HL + POP HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + PUSH HL + LD HL,(LOCK_CY) + AND A + SBC HL,BC + SRL H + RR L + EX AF,AF' + LD A,C + LD BC,(LOCK_Y) + ADD HL,BC + EX DE,HL + POP IX + LD B,A + EX AF,AF' + LD C,A + CALL SPR_256 + POP IX + AND A + RET + + +USOBJ_X DEFW 0 +USOBJ_Y DEFW 0 + + +SB_HGT DEFW 0 ;BAR HEIGHT +SB_LEN DEFW 0 ;LENGHT POINTER +SB_MIN DEFW 0 ;MIN VALUE +SB_MAX DEFW 12 ;MAX VALUE +SB_VAL DEFW 0 ;CURRENT VALUE +SB_ADD DEFW 1 ;NORMAL ADDER +SB_WIN DEFW 5 ;BIG ADDER + + +INITBAR EXX + LD HL,#FFF0 + ADD HL,BC + LD (SB_HGT),HL + EXX + LD HL,(SB_MAX) + LD DE,(SB_WIN) + AND A + SBC HL,DE + JR NC,INITB1 + LD (SB_MAX),DE +INITB1 LD HL,(SB_HGT) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD (SB_LEN),HL + RET + +INITBAH LD HL,#FFF0 + ADD HL,BC + LD (SB_HGT),HL + LD HL,(SB_MAX) + LD DE,(SB_WIN) + AND A + SBC HL,DE + JR NC,INITB1H + LD (SB_MAX),DE +INITB1H LD HL,(SB_HGT) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD (SB_LEN),HL + RET + +;SCROLL CALL SAVERG +; CALL INITBAR +; CALL RESTRG +PSCROLL PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + PUSH HL + PUSH DE + LD A,(WINDOW_) + LD (BODY),A + CALL PLACE + POP DE + POP HL + PUSH IX + LD IX,(U_S_BMP) + LD BC,#0808 + CALL SPR_256 + LD BC,(SB_LEN) + EXX + LD DE,(SB_HGT) + LD HL,(SB_VAL) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD DE,(LOCK_Y) + LD BC,8 + ADD HL,BC + ADD HL,DE + EX DE,HL + LD HL,(LOCK_X) + LD BC,(LOCK_CX) + CALL PLANE + LD HL,(LOCK_Y) + LD BC,(LOCK_CY) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + EX DE,HL + LD HL,(LOCK_X) + LD IX,(D_S_BMP) + LD BC,#0808 + CALL SPR_256 + POP IX + RET + +PSCROLH PUSH BC + LD BC,(MAIN_X) + ADD HL,BC + EX DE,HL + LD BC,(MAIN_Y) + ADD HL,BC + EX DE,HL + POP BC + LD (LOCK_X),HL + LD (LOCK_Y),DE + LD (LOCK_CX),BC + EXX + LD (LOCK_CY),BC + EXX + PUSH HL + PUSH DE + LD A,(WINDOW_) + LD (BODY),A + CALL PLACE + POP DE + POP HL + PUSH IX + LD IX,(U_S_BMP) + LD BC,#0808 + CALL SPR_256 + LD BC,(LOCK_CY) + EXX + LD DE,(SB_HGT) + LD HL,(SB_VAL) + CALL MUL + LD DE,(SB_MAX) + CALL DIV + LD DE,(LOCK_X) + LD BC,8 + ADD HL,BC + ADD HL,DE + LD DE,(LOCK_Y) + LD BC,(SB_LEN) + CALL PLANE + LD HL,(LOCK_X) + LD BC,(LOCK_CX) + ADD HL,BC + LD BC,8 + AND A + SBC HL,BC + LD DE,(LOCK_Y) + LD IX,(D_S_BMP) + LD BC,#0808 + CALL SPR_256 + POP IX + RET + +SBV_WRK LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + OR A + JP Z,PBARINI + DEC A + JP Z,PBARUP + EXX + LD HL,SBU_BMP + LD (U_S_BMP),HL + LD HL,SBD_BMA + LD (D_S_BMP),HL + EXX + JP PSCROLL + +PBARUP EXX + LD HL,SBU_BMA + LD (U_S_BMP),HL + LD HL,SBD_BMP + LD (D_S_BMP),HL + EXX + JP PSCROLL + +PBARINI EXX + LD HL,SBU_BMP + LD (U_S_BMP),HL + LD HL,SBD_BMP + LD (D_S_BMP),HL + EXX + CALL SAVERG + CALL INITBAR + CALL RESTRG + JP PSCROLL + +SBH_WRK LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + EXX + LD C,(IX+6) + LD B,(IX+7) + EXX + OR A + JP Z,PBAHINI + DEC A + JP Z,PBAHUP + EXX + LD HL,SBL_BMP + LD (U_S_BMP),HL + LD HL,SBR_BMA + LD (D_S_BMP),HL + EXX + JP PSCROLH + +PBAHUP EXX + LD HL,SBL_BMA + LD (U_S_BMP),HL + LD HL,SBR_BMP + LD (D_S_BMP),HL + EXX + JP PSCROLH + +PBAHINI EXX + LD HL,SBL_BMP + LD (U_S_BMP),HL + LD HL,SBR_BMP + LD (D_S_BMP),HL + EXX + CALL SAVERG + CALL INITBAH + CALL RESTRG + JP PSCROLH + + +U_S_BMP DEFW SBU_BMP +D_S_BMP DEFW SBD_BMP + +;Input Parameters HL/DE +;Output Result in HL,Octatok in BC +DIV LD A,H + LD C,L + LD HL,#0000 + LD B,#10 +trial1 RL C + RLA + ADC HL,HL + SBC HL,DE + CCF + JR NC,ngv1 +ptv1 DJNZ trial1 + PUSH HL + RL C + RLA + ADD HL,HL + AND A + SBC HL,DE + CCF + LD H,A + LD L,C + LD BC,0 + ADC HL,BC + POP BC + RET + +restr1 RL C + RLA + ADC HL,HL + ADD HL,DE + JR C,ptv1 +ngv1 DJNZ restr1 + RL C + RLA + ADD HL,DE + PUSH HL + ADD HL,HL + AND A + SBC HL,DE + CCF + LD H,A + LD L,C + LD BC,0 + ADC HL,BC + POP BC + RET + +MUL PUSH HL ;HL*DE--HL + XOR A + OR D + JR Z,MULENT + EX DE,HL + XOR A + OR D + JR Z,MULENT + SCF + POP HL + RET + +MULENT LD A,E + LD E,0 + LD D,E + JR MMULB2 +MMULB1 ADD HL,HL + JR C,ENDMUL +MMULB2 OR A + JR Z,ENDMUL + RRA + JR NC,MMULB1 + EX DE,HL + ADD HL,DE + EX DE,HL + JR MMULB1 +ENDMUL POP HL + EX DE,HL + RET + +ITEM_TX LD D,XH + LD E,XL + LD HL,11 + ADD HL,DE + RET + +ITEM_NX LD D,XH + LD E,XL + LD HL,11 + ADD HL,DE + LD BC,#0100 + LD A,C + CPIR + EX DE,HL + LD XH,D + LD XL,E + RET + + diff --git a/INTERFACE/FACE.ASM b/INTERFACE/FACE.ASM new file mode 100644 index 0000000..1994948 --- /dev/null +++ b/INTERFACE/FACE.ASM @@ -0,0 +1,374 @@ + +;ORG_ ORG #0000 +; DISP #0000 +INTA EQU #80 +; ROM__ +; A0000 JP NULL_0 +; DB #FF,#FF,#FF,#FF,#FF +; A0008 PUSH AF ;INT BIOS +; LD A,#00 +; OUT (#7C),A +; POP AF +; RET +; RET +; A0010 JP NULL_0 ;INT DOS +; DB #FF,#FF,#FF,#FF,#FF +; A0018 JP NULL_0 ;INT DISK +; DB #FF,#FF,#FF,#FF,#FF +; A0020 JP RST_20 ; +; DB #FF,#FF,#FF,#FF,#FF +; A0028 JP NULL_0 ; +; DB #FF,#FF,#FF,#FF,#FF +; A0030 JP NULL_0 ;INT MOUSE +; DB #FF,#FF,#FF,#FF,#FF +; A0038 JP RST_38 ;INTERRUPT +; +; BLOCK #100-$,#FF + + JP INIT + JP DLGinit + JP GETPARM + JP POPUP + JP RECTAN + JP BPUSH + JP BPOP + JP POINT + JP HZ2LINE + JP HRUBBER + JP VRUBBER + JP PLACE + JP CHARS + JP OPTIMIZ + JP SAVERG + JP RESTRG + JP CONST + JP DESTR + JP LCONST + JP LDESTR + JP LOBJECT + JP WAITMSG + JP INTMOUS + JP INTON + JP INTOFF + + JP LST_INI + JP LST_CLR + JP SBV_WRK + JP EDITBOX + + JP SBODY + JP SBMAX + JP SBWIN + JP SBVAL + JP POSSX + JP POSSY + JP RSBMAX + JP RSBWIN + JP RSBVAL + JP RPOSSX + JP RPOSSY + JP PCHARX + + JP DLGopen + JP DLGclos + + JP XFRAME + + JP HBAR + JP SBH_WRK + JP SBLEN + JP RSBLEN + JP SBHGT + JP RSBHGT + JP INITSPR + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + +NONE SCF + RET + +RST_38 ;MAIN INTERUPT + EI + RET + +NULL_0 SCF + RET + +RST_20 PUSH HL + PUSH DE + LD HL,4 + ADD HL,SP + LD E,(HL) + INC (HL) + INC HL + LD D,(HL) + JP NZ,RST401 + INC (HL) +RST401 EX DE,HL + LD L,(HL) + LD H,ADRST20/256 + LD E,(HL) + INC H + LD D,(HL) + EX DE,HL + POP DE + EX (SP),HL + RET + +I500 SCF + RET + +USERini LD A,2 + SCF + RET + +SBODY LD (BODY),A + RET + +SBMAX LD (SB_MAX),HL + RET + +SBWIN LD (SB_WIN),HL + RET + +SBVAL LD (SB_VAL),HL + RET + +POSSX LD (POSS_X),HL + RET + +POSSY LD (POSS_Y),HL + RET + +RSBMAX LD HL,(SB_MAX) + RET + +RSBWIN LD HL,(SB_WIN) + RET + +RSBVAL LD HL,(SB_VAL) + RET + +SBLEN LD (SB_LEN),HL + RET + +RSBLEN LD HL,(SB_LEN) + RET + +SBHGT LD (SB_HGT),HL + RET + +RSBHGT LD HL,(SB_HGT) + RET + + + +RPOSSX LD HL,(POSS_X) + RET + +RPOSSY LD HL,(POSS_Y) + RET + + +INITSPR LD (BSPRADR+1),HL + RET + + INCLUDE "WINDOW-H.asm" + INCLUDE "DLG.ASM" + INCLUDE "INTMOUSE.ASM" + INCLUDE "LOBJECT.ASM" + + ALIGN 256 +; ENT +; ORG $/256+1*256 +; DISP $-#8000 +FONTSIZ ;DS 32,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 +; ! " # $ % & ' ( ) * + , - . / + DB 6,3,5,6,6,7,7,3,4,4,6,6,4,6,3,6 +; 0 1 2 3 4 5 6 7 8 9 : ; < = > ? + DB 6,4,6,6,6,6,6,6,6,6,3,4,5,7,5,6 +; @ A B C D E F G H I J K L M N O + DB 6,6,6,6,6,6,6,6,6,4,5,6,6,6,6,6 +; P Q R S T U V W X Y Z [ \ ] ^ _ + DB 6,6,6,6,6,6,6,6,6,6,6,4,6,4,5,6 +; ` a b c d e f g h i j k l m n o + DB 3,6,6,6,6,6,5,6,6,4,5,5,4,6,6,6 +; p q r s t u v w x y z { | } ~ + DB 6,6,6,6,5,6,6,6,6,6,6,4,3,4,6,6 + +; A B V G D E J Z I J K L M N O P + DB 6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6 +; R S T U F H C h W W X Y X E U Q + DB 6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6 +; a b v g d e j z i j k l m n o p + DB 6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6 +; DS 48,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + +; r s t u f h c h w w x y x e u q + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6 + DB 6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,1 + +FONTER ;INCBIN "IFFWIN2.BIN" + +; Data block size: 2048 + DB #00,#70,#70,#00,#00,#00,#00,#00,#F8,#00,#F8,#38,#70,#38,#78,#20 + DB #40,#08,#20,#50,#78,#70,#00,#20,#20,#20,#00,#00,#00,#00,#00,#00 + DB #00,#40,#50,#50,#20,#C8,#20,#C0,#20,#40,#48,#20,#00,#00,#00,#08 + DB #70,#40,#70,#70,#10,#F8,#70,#F8,#70,#70,#00,#00,#30,#00,#C0,#70 + DB #78,#70,#F0,#70,#E0,#F8,#F8,#70,#88,#E0,#10,#90,#80,#88,#88,#70 + DB #F0,#70,#F0,#70,#F8,#88,#88,#88,#88,#88,#F8,#E0,#80,#E0,#20,#00 + DB #C0,#00,#80,#00,#08,#00,#30,#00,#80,#40,#10,#80,#C0,#00,#00,#00 + DB #00,#00,#00,#00,#40,#00,#00,#00,#00,#00,#00,#60,#40,#C0,#68,#00 + DB #38,#F0,#F0,#F8,#38,#F8,#A8,#70,#88,#A8,#90,#38,#88,#88,#70,#F8 + DB #F0,#70,#F8,#88,#70,#88,#88,#88,#A8,#A8,#C0,#84,#80,#F0,#98,#78 + DB #00,#78,#00,#00,#00,#00,#00,#00,#00,#20,#00,#00,#00,#00,#00,#00 + DB #88,#A8,#64,#20,#20,#20,#50,#00,#00,#50,#50,#00,#50,#50,#20,#00 + DB #20,#20,#00,#20,#00,#20,#20,#50,#50,#00,#50,#00,#50,#00,#50,#20 + DB #50,#00,#00,#50,#20,#00,#00,#50,#20,#20,#00,#FC,#00,#E0,#1C,#FC + DB #00,#00,#00,#00,#20,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #50,#50,#00,#00,#00,#20,#00,#00,#00,#00,#00,#1C,#A0,#E0,#00,#80 + DB #00,#88,#F8,#50,#20,#70,#20,#00,#F8,#20,#D8,#18,#88,#28,#48,#A8 + DB #60,#18,#70,#50,#A8,#88,#00,#70,#70,#20,#20,#20,#00,#00,#00,#00 + DB #00,#40,#50,#F8,#78,#D8,#50,#40,#40,#20,#30,#20,#00,#00,#00,#18 + DB #88,#C0,#88,#88,#30,#80,#80,#08,#88,#88,#40,#20,#60,#F8,#60,#88 + DB #94,#88,#88,#88,#90,#80,#80,#88,#88,#40,#10,#A0,#80,#D8,#C8,#88 + DB #88,#88,#88,#80,#20,#88,#88,#88,#50,#50,#10,#80,#C0,#20,#50,#00 + DB #80,#70,#80,#70,#08,#70,#40,#70,#80,#00,#00,#90,#40,#D0,#B0,#70 + DB #F0,#78,#B0,#78,#E0,#88,#88,#88,#88,#88,#F8,#40,#40,#40,#B0,#30 + DB #48,#80,#88,#80,#48,#80,#A8,#88,#88,#A8,#A0,#48,#D8,#88,#88,#88 + DB #88,#88,#20,#88,#A8,#50,#88,#88,#A8,#A8,#40,#84,#80,#08,#A4,#88 + DB #70,#80,#F0,#F8,#38,#70,#A8,#70,#88,#A8,#88,#38,#88,#88,#70,#F8 + DB #20,#54,#98,#20,#20,#20,#50,#00,#00,#50,#50,#00,#50,#50,#20,#00 + DB #20,#20,#00,#20,#00,#20,#20,#50,#50,#00,#50,#00,#50,#00,#50,#20 + DB #50,#00,#00,#50,#20,#00,#00,#50,#20,#20,#00,#FC,#00,#E0,#1C,#FC + DB #F0,#70,#F8,#88,#70,#88,#88,#88,#A8,#A8,#C0,#88,#80,#F0,#98,#78 + DB #F8,#70,#60,#18,#10,#20,#20,#68,#00,#00,#00,#10,#50,#10,#00,#80 + DB #00,#D8,#A8,#F8,#70,#20,#70,#20,#D8,#50,#A8,#28,#88,#20,#78,#70 + DB #70,#38,#F8,#50,#A8,#60,#00,#F8,#F8,#20,#30,#60,#80,#50,#20,#F8 + DB #00,#40,#00,#50,#A0,#30,#20,#80,#40,#20,#FC,#F8,#00,#F8,#00,#30 + DB #98,#40,#08,#30,#50,#F0,#F0,#10,#70,#88,#00,#00,#C0,#00,#30,#10 + DB #AC,#88,#F0,#80,#88,#F0,#F0,#80,#F8,#40,#10,#C0,#80,#A8,#A8,#88 + DB #88,#88,#88,#70,#20,#88,#88,#88,#20,#20,#20,#80,#60,#20,#88,#00 + DB #40,#08,#F0,#88,#78,#88,#E0,#88,#F0,#C0,#10,#A0,#40,#A8,#C8,#88 + DB #88,#88,#C8,#80,#40,#88,#88,#A8,#50,#88,#10,#80,#00,#20,#00,#48 + DB #88,#F0,#F0,#80,#48,#F0,#70,#30,#98,#98,#C0,#48,#A8,#F8,#88,#88 + DB #88,#80,#20,#78,#A8,#20,#88,#88,#A8,#A8,#70,#E4,#F0,#78,#E4,#88 + DB #08,#70,#88,#80,#48,#88,#A8,#88,#98,#98,#90,#48,#D8,#88,#88,#88 + DB #88,#A8,#64,#20,#20,#E0,#50,#00,#E0,#D0,#50,#F0,#D0,#50,#E0,#00 + DB #20,#20,#00,#20,#00,#20,#3C,#50,#5C,#7C,#DC,#FC,#5C,#FC,#DC,#FC + DB #50,#FC,#00,#50,#3C,#3C,#00,#50,#FC,#20,#00,#FC,#00,#E0,#1C,#FC + DB #88,#88,#20,#88,#A8,#50,#88,#88,#A8,#A8,#70,#C8,#F0,#08,#A4,#88 + DB #80,#88,#30,#30,#28,#20,#00,#B0,#20,#00,#00,#10,#50,#60,#00,#80 + DB #00,#88,#F8,#F8,#F8,#F8,#F8,#70,#88,#88,#70,#70,#88,#20,#48,#D8 + DB #78,#78,#20,#50,#68,#50,#00,#20,#20,#20,#F8,#F8,#80,#F8,#70,#70 + DB #00,#40,#00,#50,#70,#60,#58,#00,#40,#20,#30,#20,#00,#00,#00,#60 + DB #A8,#40,#70,#08,#90,#08,#88,#20,#88,#78,#00,#00,#60,#F8,#60,#20 + DB #BC,#F8,#88,#80,#88,#80,#80,#98,#88,#40,#10,#A0,#80,#88,#98,#88 + DB #F0,#A8,#F0,#08,#20,#88,#88,#A8,#20,#20,#40,#80,#30,#20,#00,#00 + DB #00,#78,#88,#80,#88,#F0,#40,#88,#88,#40,#10,#C0,#40,#A8,#88,#88 + DB #88,#88,#80,#70,#40,#88,#50,#A8,#20,#78,#20,#80,#40,#20,#00,#84 + DB #F8,#88,#88,#80,#48,#80,#A8,#08,#A8,#A8,#A0,#48,#88,#88,#88,#88 + DB #F0,#80,#20,#08,#A8,#20,#88,#78,#A8,#A8,#48,#94,#88,#08,#A4,#78 + DB #78,#88,#F0,#80,#48,#F0,#70,#30,#A8,#A8,#E0,#48,#A8,#F8,#88,#88 + DB #20,#54,#98,#20,#20,#20,#50,#00,#20,#10,#50,#10,#10,#50,#20,#00 + DB #20,#20,#00,#20,#00,#20,#20,#50,#40,#40,#00,#00,#40,#00,#00,#00 + DB #50,#00,#00,#50,#20,#20,#00,#50,#20,#20,#00,#FC,#00,#E0,#1C,#FC + DB #88,#80,#20,#78,#A8,#20,#88,#78,#A8,#A8,#48,#A8,#88,#78,#E4,#88 + DB #F0,#F0,#18,#60,#20,#20,#F8,#00,#50,#00,#00,#10,#50,#80,#00,#80 + DB #00,#F8,#88,#F8,#F8,#A8,#F8,#70,#88,#88,#70,#88,#70,#20,#48,#D8 + DB #70,#38,#F8,#00,#28,#50,#00,#F8,#20,#F8,#30,#60,#80,#50,#F8,#20 + DB #00,#00,#00,#F8,#28,#D8,#90,#00,#40,#20,#48,#20,#60,#00,#C0,#C0 + DB #C8,#40,#80,#88,#F8,#88,#88,#20,#88,#08,#40,#20,#30,#00,#C0,#00 + DB #80,#88,#88,#88,#90,#80,#80,#88,#88,#40,#90,#90,#80,#88,#88,#88 + DB #80,#98,#90,#88,#20,#88,#50,#F8,#50,#20,#80,#80,#18,#20,#00,#00 + DB #00,#88,#88,#80,#88,#80,#40,#78,#88,#40,#10,#A0,#40,#A8,#88,#88 + DB #F0,#78,#80,#08,#40,#88,#50,#A8,#50,#08,#40,#40,#40,#40,#00,#84 + DB #88,#88,#88,#80,#48,#80,#A8,#88,#C8,#C8,#90,#48,#88,#88,#88,#88 + DB #80,#88,#20,#88,#70,#50,#88,#08,#A8,#A8,#48,#94,#88,#08,#A4,#48 + DB #88,#88,#88,#80,#48,#80,#A8,#88,#C8,#C8,#90,#48,#88,#88,#88,#88 + DB #88,#A8,#64,#20,#E0,#E0,#D0,#F0,#E0,#D0,#50,#D0,#F0,#F0,#E0,#E0 + DB #3C,#FC,#FC,#3C,#FC,#FC,#3C,#5C,#7C,#5C,#FC,#DC,#5C,#FC,#DC,#FC + DB #FC,#FC,#FC,#7C,#3C,#3C,#7C,#FC,#FC,#E0,#3C,#FC,#FC,#E0,#1C,#00 + DB #F0,#88,#20,#08,#70,#50,#88,#08,#A8,#A8,#48,#A8,#88,#08,#A4,#78 + DB #80,#80,#30,#30,#20,#20,#00,#68,#50,#30,#00,#D0,#50,#F0,#78,#80 + DB #00,#A8,#D8,#70,#70,#20,#20,#20,#D8,#50,#A8,#88,#20,#E0,#58,#70 + DB #60,#18,#70,#50,#28,#30,#78,#70,#20,#70,#20,#20,#F8,#00,#00,#00 + DB #00,#40,#00,#50,#F0,#98,#68,#00,#20,#40,#00,#00,#60,#00,#C0,#80 + DB #70,#E0,#F8,#70,#10,#70,#70,#20,#70,#70,#00,#40,#00,#00,#00,#20 + DB #78,#88,#F0,#70,#E0,#F8,#80,#78,#88,#E0,#60,#88,#F8,#88,#88,#70 + DB #80,#78,#88,#70,#20,#70,#20,#50,#88,#20,#F8,#E0,#08,#E0,#00,#00 + DB #00,#78,#F0,#78,#78,#78,#E0,#08,#88,#E0,#90,#90,#E0,#A8,#88,#70 + DB #80,#08,#80,#F0,#30,#70,#20,#50,#88,#F0,#F8,#60,#40,#C0,#00,#FC + DB #88,#F0,#F0,#80,#FC,#F8,#A8,#70,#88,#88,#88,#88,#88,#88,#70,#88 + DB #80,#70,#20,#70,#20,#88,#FC,#08,#F8,#FC,#70,#E4,#F0,#F0,#98,#88 + DB #78,#70,#F0,#80,#FC,#78,#A8,#70,#88,#88,#88,#C8,#88,#88,#70,#88 + DB #20,#54,#98,#20,#20,#20,#50,#50,#20,#50,#50,#50,#00,#00,#00,#20 + DB #00,#00,#20,#20,#00,#20,#20,#50,#00,#50,#00,#50,#50,#00,#50,#00 + DB #00,#20,#50,#00,#00,#20,#50,#50,#20,#00,#20,#FC,#FC,#E0,#1C,#00 + DB #80,#70,#20,#70,#20,#88,#FC,#08,#F8,#FC,#70,#C8,#F0,#F0,#98,#88 + DB #F8,#78,#60,#18,#20,#A0,#20,#B0,#20,#30,#30,#70,#00,#00,#78,#80 + DB #00,#88,#F8,#20,#20,#70,#70,#00,#F8,#20,#D8,#88,#70,#C0,#D8,#A8 + DB #40,#08,#20,#00,#28,#88,#78,#20,#20,#20,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#20,#00,#00,#00,#00,#00,#00,#00,#C0,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#70,#00,#00,#60,#00,#00,#00,#00,#00 + DB #80,#08,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#84,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#04,#00,#00,#04,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#84,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #88,#A8,#64,#20,#20,#20,#50,#50,#20,#50,#50,#50,#00,#00,#00,#20 + DB #00,#00,#20,#20,#00,#20,#20,#50,#00,#50,#00,#50,#50,#00,#50,#00 + DB #00,#20,#50,#00,#00,#20,#50,#50,#20,#00,#20,#FC,#FC,#E0,#1C,#00 + DB #80,#00,#00,#00,#20,#00,#04,#00,#00,#04,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#20,#40,#00,#00,#00,#00,#00,#30,#00,#00,#78,#80 + DB #00,#70,#70,#00,#00,#00,#00,#00,#F8,#00,#F8,#70,#20,#00,#C0,#20 + DB #00,#00,#00,#00,#00,#70,#00,#F8,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#FC + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #20,#54,#98,#20,#20,#20,#50,#50,#20,#50,#50,#50,#00,#00,#00,#20 + DB #00,#00,#20,#20,#00,#20,#20,#50,#00,#50,#00,#50,#50,#00,#50,#00 + DB #00,#20,#50,#00,#00,#20,#50,#50,#20,#00,#20,#FC,#FC,#E0,#1C,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#FC,#FC,#20,#00,#00,#00,#00,#00,#00,#10,#00,#00,#78,#80 + +; INCLUDE "keyinter.asm" + +ADRST20; + DB I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF + DB I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF + DS #F0 + + DB I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256 + DB I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256 + DS #F0 + +; ENT +_______ + + diff --git a/INTERFACE/FACE_ALT.ASM b/INTERFACE/FACE_ALT.ASM new file mode 100644 index 0000000..af99ebd --- /dev/null +++ b/INTERFACE/FACE_ALT.ASM @@ -0,0 +1,241 @@ + +;ORG_ ORG #0000 +; DISP #0000 +INTA EQU #80 +; ROM__ +; A0000 JP NULL_0 +; DB #FF,#FF,#FF,#FF,#FF +; A0008 PUSH AF ;INT BIOS +; LD A,#00 +; OUT (#7C),A +; POP AF +; RET +; RET +; A0010 JP NULL_0 ;INT DOS +; DB #FF,#FF,#FF,#FF,#FF +; A0018 JP NULL_0 ;INT DISK +; DB #FF,#FF,#FF,#FF,#FF +; A0020 JP RST_20 ; +; DB #FF,#FF,#FF,#FF,#FF +; A0028 JP NULL_0 ; +; DB #FF,#FF,#FF,#FF,#FF +; A0030 JP NULL_0 ;INT MOUSE +; DB #FF,#FF,#FF,#FF,#FF +; A0038 JP RST_38 ;INTERRUPT + +; DS 197 +; ORG #0200 + JP INIT + JP DLGinit + JP GETPARM + JP POPUP + JP RECTAN + JP BPUSH + JP BPOP + JP POINT + JP HZ2LINE + JP HRUBBER + JP VRUBBER + JP PLACE + JP CHARS + JP OPTIMIZ + JP SAVERG + JP RESTRG + JP CONST + JP DESTR + JP LCONST + JP LDESTR + JP LOBJECT + JP WAITMSG + JP INTMOUS + JP INTON + JP INTOFF + + JP LST_INI + JP LST_CLR + JP SBV_WRK + JP EDITBOX + + JP SBODY + JP SBMAX + JP SBWIN + JP SBVAL + JP POSSX + JP POSSY + JP RSBMAX + JP RSBWIN + JP RSBVAL + JP RPOSSX + JP RPOSSY + JP PCHARX + + JP DLGopen + JP DLGclos + + JP XFRAME + + JP HBAR + JP SBH_WRK + JP SBLEN + JP RSBLEN + JP SBHGT + JP RSBHGT + JP INITSPR + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + JP NONE + +NONE SCF + RET + +RST_38 ;MAIN INTERUPT + EI + RET + +NULL_0 SCF + RET + +RST_20 PUSH HL + PUSH DE + LD HL,4 + ADD HL,SP + LD E,(HL) + INC (HL) + INC HL + LD D,(HL) + JP NZ,RST401 + INC (HL) +RST401 EX DE,HL + LD L,(HL) + LD H,ADRST20/256 + LD E,(HL) + INC H + LD D,(HL) + EX DE,HL + POP DE + EX (SP),HL + RET + +I500 SCF + RET + +USERini LD A,2 + SCF + RET + +SBODY LD (BODY),A + RET + +SBMAX LD (SB_MAX),HL + RET + +SBWIN LD (SB_WIN),HL + RET + +SBVAL LD (SB_VAL),HL + RET + +POSSX LD (POSS_X),HL + RET + +POSSY LD (POSS_Y),HL + RET + +RSBMAX LD HL,(SB_MAX) + RET + +RSBWIN LD HL,(SB_WIN) + RET + +RSBVAL LD HL,(SB_VAL) + RET + +SBLEN LD (SB_LEN),HL + RET + +RSBLEN LD HL,(SB_LEN) + RET + +SBHGT LD (SB_HGT),HL + RET + +RSBHGT LD HL,(SB_HGT) + RET + + + +RPOSSX LD HL,(POSS_X) + RET + +RPOSSY LD HL,(POSS_Y) + RET + + +INITSPR LD (BSPRADR+1),HL + RET + + INCLUDE "WINDOW-H.asm" + INCLUDE "DLG.ASM" + INCLUDE "INTMOUSE.ASM" + INCLUDE "LOBJECT.ASM" + + ALIGN 256 +; ENT +; ORG $/256+1*256 +; DISP $-#8000 +FONTSIZ ;DS 32,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 +; ! " # $ % & ' ( ) * + , - . / + DB 6,3,5,6,6,7,7,3,4,4,6,6,4,6,3,7 +; 0 1 2 3 4 5 6 7 8 9 : ; < = > ? + DB 6,4,6,6,6,6,6,6,6,6,3,4,6,7,6,6 +; @ A B C D E F G H I J K L M N O + DB 7,6,6,6,6,6,6,6,6,3,5,6,6,8,6,6 +; P Q R S T U PE W X Y Z [ \ ] ^ _ + DB 6,6,6,6,6,6,6,8,6,6,6,4,6,4,5,6 +; ` a b c d e f g h i j k l m n o + DB 3,6,6,6,6,6,4,6,6,2,5,6,2,8,6,6 +; p q r s t u v w x y z { | } ~ + DB 6,6,3,5,3,6,6,8,6,6,6,4,3,4,6,6 + +; A B PE G D E J Z I J K L M N O P + DB 6,6,6,6,7,6,8,6,6,6,6,6,8,6,6,6 +; R S T U F H C h W W X Y X E U Q + DB 6,6,6,6,8,6,6,6,8,8,7,7,6,6,8,6 +; a b v g d e j z i j k l m n o p + DB 6,6,6,6,7,6,8,6,6,6,6,6,8,6,6,6 +; DS 48,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + +; r s t u f h c h w w x y x e u q + DB 6,6,6,5,8,5,6,6,8,8,7,7,6,6,7,6 + DB 6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,1 + +FONTER INCBIN "IFFWIN2.BIN" + +ADRST20; + DB I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF + DB I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF,I500&#FF + DS #F0 + + DB I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256 + DB I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256,I500/256 + DS #F0 + +; ENT +_______ + diff --git a/INTERFACE/IFFWIN2.BIN b/INTERFACE/IFFWIN2.BIN new file mode 100644 index 0000000..ac9f6b7 Binary files /dev/null and b/INTERFACE/IFFWIN2.BIN differ diff --git a/INTERFACE/INTMOUSE.ASM b/INTERFACE/INTMOUSE.ASM new file mode 100644 index 0000000..7904f27 --- /dev/null +++ b/INTERFACE/INTMOUSE.ASM @@ -0,0 +1,666 @@ + +;[BEGIN] +CMOUSE EQU #1B +DMOUSE EQU #1A +VSIZEX EQU 320 +VSIZEY EQU 256 + +X EQU #EE +W EQU #EF +N EQU #FF + +; MOUSE SOFTWARE SPECIFICATION +;--------------------------------------------- +; COMMAND 00h (INITIALIZATION) +; +; RETURN: NC - MOUSE PRESENT +; C - MOUSE ABSENT +;--------------------------------------------- +; COMMAND 01h (SHOW MOUSE CURSOR) +; +; RETURN: NC - DONE +; C - MOUSE ON SCREEN +;--------------------------------------------- +; COMMAND 02h (HIDE MOUSE CURSOR) +; +; RETURN: NC - DONE +; C - NONE MOUSE +;--------------------------------------------- +; COMMAND 03h (READ MOUSE STATE) +; +; RETURN: HL - X COORD +; DE - Y COORD +; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT) +;--------------------------------------------- +; COMMAND 04h (GOTO MOUSE CURSOR) +; +; INPUT: HL - X COORD +; DE - Y COORD +;--------------------------------------------- +; COMMAND 05h (GET CLICK FROM BUFFER) +; +; RETURN: NC - BUFFER EMPTY +; C - CLICK +; HL - X COORD +; DE - Y COORD +; A - BUTTONS +;--------------------------------------------- +; COMMAND 06h (SELECT CURSOR) +; +; INPUT: A - CURSOR NUMBER +;--------------------------------------------- +; ERRORS: 0 - NO ERROR +; 1 - COMMAND NOT PRESENT +; 2 - DEVICE ABSENT +; 3 - CURSOR ON (UZHE) +; 4 - CURSOR OFF (UZHE) + +INTMOUS INC C + DEC C + JP Z,MS_INIT + DEC C + JP Z,MS_SHOW + DEC C + JP Z,MS_HIDD + DEC C + JP Z,MS_READ + DEC C + JP Z,MS_GOTO + DEC C + JP Z,MS_CLIK + DEC C + JP Z,MS_CURS + LD A,1 + SCF + RET + +MS_INIT DI + LD A,85 + OUT (#10),A + LD A,45 + OUT (#10),A + LD A,0 + OUT (CMOUSE),A + LD A,1 + OUT (CMOUSE),A + LD A,0 + OUT (CMOUSE),A + LD A,3 + OUT (CMOUSE),A + LD A,#41 + OUT (CMOUSE),A + LD A,4 + OUT (CMOUSE),A + LD A,#47 + OUT (CMOUSE),A + LD A,5 + OUT (CMOUSE),A + LD A,#60 + OUT (CMOUSE),A + EI + XOR A + RET + +MS_SHOW PUSH IX + PUSH HL + PUSH DE + EX AF,AF' + PUSH AF + LD HL,(PIX_X) + LD DE,(PIX_Y) + DI + CALL MOUSE + XOR A + LD (REFRESH+1),A + EI + POP AF + EX AF,AF' + POP DE + POP HL + POP IX + XOR A + RET + +MS_HIDD PUSH IX + PUSH HL + PUSH DE + EX AF,AF' + PUSH AF + DI + LD A,1 + LD (REFRESH+1),A + CALL RESTORE + EI + POP AF + EX AF,AF' + POP DE + POP HL + POP IX + XOR A + RET + +MS_READ LD HL,(PIX_X) + LD DE,(PIX_Y) + LD A,(MB) + AND A + RET + +MS_GOTO PUSH IX + PUSH HL + PUSH DE + LD (PIX_X),HL + LD (PIX_Y),DE + EX AF,AF' + PUSH AF + DI + CALL REFRESH + EI + POP AF + EX AF,AF' + POP DE + POP HL + POP IX + XOR A + RET + +MS_CLIK CALL GCLICK + LD H,B + LD L,C + RET + +MS_CURS LD HL,MS_BMP + INC A + LD D,H + LD E,L + LD BC,140 +MS_CUR2 ADD HL,BC + DEC A + JP NZ,MS_CUR2 + DI + LDIR + EI + XOR A + RET + +RESTORE IN A,(PAGE1) + LD B,A + IN A,(Y_PORT) + LD C,A + PUSH BC + LD A,#50 + OUT (PAGE1),A +REST_X LD HL,0 +REST_Y LD DE,0 +REST_H LD BC,0 + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD XH,14 + EX AF,AF' +RS002 LD BC,10 + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + LD D,H + LD E,L + LDIR + POP HL + DEC XH + JR Z,RS003 + EX AF,AF' + INC A + JP NZ,RS002 +RS003 POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +; B - WIDTH +; C - HEIGHT + +MOUSE LD (REST_X+1),HL + LD (REST_Y+1),DE + LD (REST_H+1),BC + PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#5C + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD DE,MS_BMP + EX DE,HL + LD XH,14 + EX AF,AF' +MS002 LD BC,10 + OUT (Y_PORT),A + EX AF,AF' +MS001 PUSH DE + LDIR + POP DE +MS004 DEC XH + JR Z,MS003 + EX AF,AF' + INC A + JP NZ,MS002 +MS003 POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +READ_M IN A,(CMOUSE) + RRCA + RET NC + IN A,(DMOUSE) + LD L,A + BIT 6,A + CCF + RET Z +TST_01 IN A,(CMOUSE) + RRCA + JP NC,TST_01 + IN A,(DMOUSE) + LD E,A + BIT 6,A + CCF + RET NZ +TST_02 IN A,(CMOUSE) + RRCA + JP NC,TST_02 + IN A,(DMOUSE) + LD D,A + BIT 6,A + CCF + RET NZ + LD A,E + AND #3F + LD E,A + LD A,L + AND #03 + RRCA + RRCA + OR E + LD E,A + LD A,D + AND #3F + LD D,A + LD A,L + AND #0C + RRCA + RRCA + RRCA + RRCA + OR D + LD D,A + LD A,L + RLCA + RLCA + RLCA + RES 6,A + JR NC,STBU + SET 6,A +STBU RLCA + RLCA + AND #03 + LD (MB),A + LD A,E + LD (MX),A + LD A,D + LD (MY),A + SCF + RET + +MCORECT LD HL,(PIX_X) + LD DE,(MX) + LD D,0 + BIT 7,E + JP NZ,DECX + ADD HL,DE + LD (PIX_X),HL + EX DE,HL + LD HL,VSIZEX-1 + AND A + SBC HL,DE + JP NC,YCOO + LD HL,VSIZEX-1 + LD (PIX_X),HL + JP YCOO +DECX LD A,E + NEG + LD E,A + AND A + SBC HL,DE + LD (PIX_X),HL + JP NC,YCOO + LD HL,0 + LD (PIX_X),HL +YCOO LD HL,(PIX_Y) + LD DE,(MY) + LD D,0 + BIT 7,E + JP NZ,DECY + ADD HL,DE + LD (PIX_Y),HL + EX DE,HL + LD HL,VSIZEY-1 + AND A + SBC HL,DE + RET NC + LD HL,VSIZEY-1 + LD (PIX_Y),HL + RET + +DECY LD A,E + NEG + LD E,A + AND A + SBC HL,DE + LD (PIX_Y),HL + RET NC + LD HL,0 + LD (PIX_Y),HL + RET + +INTON DI + LD HL,INT_ + LD (INTA*256+#FF),HL + LD A,INTA + LD I,A + IM 2 + EI + RET + +INTOFF DI + LD A,#3F + LD I,A + IM 1 + EI + RET + +;Main Interrupt +INT_ PUSH IY + PUSH IX + PUSH HL + PUSH DE + PUSH BC + PUSH AF + EX AF,AF' + EXX + PUSH HL + PUSH DE + PUSH BC + PUSH AF + IN A,(PAGE1) + LD B,A + IN A,(Y_PORT) + LD C,A + PUSH BC + CALL REFRESH ;Refresh mouse + CALL CONTROL + LD A,5 ;SPECTRUM + OUT (PAGE1),A ; + LD A,#C0 ;INTERRUPT + OUT (Y_PORT),A ; + LD IY,#5C3A ;!!!!!!!!! + CALL #0038 ; + DI + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + POP AF + POP BC + POP DE + POP HL + EXX + EX AF,AF' + POP AF + POP BC + POP DE + POP HL + POP IX + POP IY + EI + RETI + +CONTROL CALL READ_M + RET NC + CALL MCORECT + LD A,#00 + LD (REDY+1),A + LD HL,MB_OLD + LD A,(MB) + CP (HL) + RET Z + LD (MB_OLD),A + EX AF,AF' + LD A,(CLICKS) + CP 50 + RET Z + LD E,A + ADD A,A + ADD A,A + ADD A,E + LD E,A + LD D,0 + LD HL,CLICK_B + ADD HL,DE + LD BC,(PIX_X) + LD DE,(PIX_Y) + EX AF,AF' + LD (HL),A + INC HL + LD (HL),C + INC HL + LD (HL),B + INC HL + LD (HL),E + INC HL + LD (HL),D + LD A,(CLICKS) + INC A + LD (CLICKS),A + RET + +GCLICK LD A,(CLICKS) + OR A + RET Z + DEC A + LD (CLICKS),A + LD HL,CLICK_B + LD A,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD E,(HL) + INC HL + LD D,(HL) + EXX + LD HL,CLICK_B-5 + LD DE,CLICK_B + LD BC,245 + LDIR + EXX + SCF + RET + +REFRESH LD A,#01 + OR A + RET NZ +REDY LD A,#00 +; OR A +; RET NZ + CALL RESTORE + LD HL,(PIX_X) + LD DE,(PIX_Y) + CALL MOUSE + LD A,#FF + LD (REDY+1),A + RET + +PIX_X DW 160 +PIX_Y DW 128 + +MX DB #00 +MY DB #00 +MB DB #00 +MB_OLD DB #00 + +CLICKS DB #00 + +CLICK_B DS 250 + +MS_BMP DS 140 + +CURSOR1 DB X,X,N,N,N,N,N,N,N,N + DB X,W,X,N,N,N,N,N,N,N + DB X,W,W,X,N,N,N,N,N,N + DB X,W,W,W,X,N,N,N,N,N + DB X,W,W,W,W,X,N,N,N,N + DB X,W,W,W,W,W,X,N,N,N + DB X,W,W,W,W,W,W,X,N,N + DB X,W,W,W,W,X,X,X,X,N + DB X,W,W,X,W,X,N,N,N,N + DB X,W,X,X,W,W,X,N,N,N + DB X,X,N,N,X,W,X,N,N,N + DB X,N,N,N,X,W,W,X,N,N + DB N,N,N,N,N,X,X,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR2 DB N,N,X,X,X,X,N,N,N,N + DB N,X,W,W,W,W,X,N,N,N + DB X,W,N,X,X,N,N,X,N,N + DB X,W,X,N,N,N,N,X,N,N + DB X,W,X,N,N,N,N,X,N,N + DB X,W,N,N,N,N,N,X,N,N + DB N,X,N,N,N,N,X,X,N,N + DB N,N,X,X,X,X,X,W,X,N + DB N,N,N,N,N,N,N,X,W,X + DB N,N,N,N,N,N,N,N,X,X + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR3 DB X,N,N,N,N,N,N,N,N,N + DB N,X,X,N,N,N,N,N,N,N + DB N,X,W,X,X,N,N,N,N,N + DB N,N,X,X,W,X,N,N,N,N + DB N,N,X,W,X,W,X,N,N,N + DB N,N,N,X,W,X,W,X,N,N + DB N,N,N,N,X,W,X,W,X,N + DB N,N,N,N,N,X,W,X,W,X + DB N,N,N,N,N,N,X,W,X,N + DB N,N,N,N,N,N,N,X,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR4 DB X,N,N,N,N,N,N,N,N,N + DB N,X,X,N,N,N,N,N,N,N + DB N,X,W,X,X,N,N,N,N,N + DB N,N,X,X,W,X,N,N,N,N + DB N,N,X,W,X,W,X,N,N,N + DB N,N,N,X,W,X,W,X,N,N + DB N,N,N,N,X,W,X,W,X,N + DB N,N,N,N,N,X,W,X,W,X + DB N,N,N,N,N,N,X,W,X,N + DB N,N,N,N,N,N,N,X,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR5 DB X,X,N,N,N,N,N,N,N,N + DB X,W,X,N,N,N,N,N,N,N + DB X,W,W,X,N,N,N,N,N,N + DB X,W,W,W,X,N,N,N,N,N + DB X,W,W,W,W,X,N,N,N,N + DB X,W,W,X,X,X,X,N,N,N + DB X,W,X,W,X,N,N,N,N,N + DB X,X,N,X,W,X,N,N,N,N + DB X,N,N,N,X,X,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR6 DB X,X,N,N,N,N,N,N,N,N + DB X,W,X,N,N,N,N,N,N,N + DB X,W,W,X,N,N,N,N,N,N + DB X,W,W,W,X,N,N,N,N,N + DB X,W,W,W,W,X,N,N,N,N + DB X,W,W,X,X,X,X,N,N,N + DB X,W,X,W,X,N,N,N,N,N + DB X,X,N,X,W,X,N,N,N,N + DB X,N,N,N,X,X,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR7 DB X,X,N,N,N,N,N,N,N,N + DB X,W,X,N,N,N,N,N,N,N + DB X,W,W,X,N,N,N,N,N,N + DB X,W,W,W,X,N,N,N,N,N + DB X,W,W,W,W,X,N,N,N,N + DB X,W,W,X,X,X,X,N,N,N + DB X,W,X,W,X,N,N,N,N,N + DB X,X,N,X,W,X,N,N,N,N + DB X,N,N,N,X,X,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR8 DB X,X,N,N,N,N,N,N,N,N + DB X,W,X,N,N,N,N,N,N,N + DB X,W,W,X,N,N,N,N,N,N + DB X,W,W,W,X,N,N,N,N,N + DB X,W,W,W,W,X,N,N,N,N + DB X,W,W,W,W,W,X,N,N,N + DB X,W,W,W,W,W,W,X,N,N + DB X,W,W,W,W,X,X,X,X,N + DB X,W,W,X,W,X,N,N,N,N + DB X,W,X,X,W,W,X,N,N,N + DB X,X,N,N,X,W,X,N,N,N + DB X,N,N,N,X,W,W,X,N,N + DB N,N,N,N,N,X,X,N,N,N + DB N,N,N,N,N,N,N,N,N,N + +CURSOR9 DB X,X,X,X,X,X,X,X,X,N + DB N,X,X,X,X,X,X,X,N,N + DB N,X,W,W,W,W,W,X,N,N + DB N,X,W,X,W,X,W,X,N,N + DB N,X,W,W,X,W,W,X,N,N + DB N,N,X,W,W,W,X,N,N,N + DB N,N,N,X,W,X,N,N,N,N + DB N,N,N,X,W,X,N,N,N,N + DB N,N,X,W,W,W,X,N,N,N + DB N,X,W,W,W,W,W,X,N,N + DB N,X,W,W,X,W,W,X,N,N + DB N,X,W,X,W,X,W,X,N,N + DB N,X,X,X,X,X,X,X,N,N + DB X,X,X,X,X,X,X,X,X,N + + diff --git a/INTERFACE/KEYINTER.ASM b/INTERFACE/KEYINTER.ASM new file mode 100644 index 0000000..0d9a57c --- /dev/null +++ b/INTERFACE/KEYINTER.ASM @@ -0,0 +1,745 @@ + +;[BEGIN] +;//MODULE: KEYINTER +;//CREATE: 19-05-1998 AUTHOR: Denis Parinov +;//UPDATE: 24-10-1999 DNS Restore module + +SBUF DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +EBUF + +HEAD DB #00 +HOST DB #00 + +K_LOCK EQU $-KEYFLAG +LANG_L EQU 7 +PAUSE_L EQU 6 +RES5_L EQU 5 +RES4_L EQU 4 +NUM_L EQU 3 +SCRL_L EQU 2 +INS_L EQU 1 +CAPS_L EQU 0 +KEYFLAG DB #02 ;D0-Key Pressed + +K_SHIFT EQU $-KEYFLAG +L_SHIFT EQU 7 +R_SHIFT EQU 6 +X_CTRL EQU 5 +X_ALT EQU 4 +L_CTRL EQU 3 +L_ALT EQU 2 +R_CTRL EQU 1 +R_ALT EQU 0 +KEYCTRL DB #00 + +KEYFLG EQU $-KEYFLAG +FLAG_E0 EQU 7 +FLAG_F0 EQU 6 +FLAG_E1 EQU 5 +FLAG_04 EQU 4 +FLAG_03 EQU 3 +FLAG_02 EQU 2 +FLAG_01 EQU 1 +FLAG_00 EQU 0 + DB #00 + +SOUND_K EQU $-KEYFLAG +FLAG_S7 EQU 7 +FLAG_S6 EQU 6 +FLAG_S5 EQU 5 +FLAG_S4 EQU 4 +FLAG_S3 EQU 3 +FLAG_S2 EQU 2 +SF_ALT EQU 1 +SF_BUFF EQU 0 + DB #03 + +; D15 - LShift +; D14 - RShift +; D13 - CTRL +; D12 - ALT +; D11 - LCTRL +; D10 - LALT +; D9 - RCTRL +; D8 - RALT +; D7 - Language Lock +; D6 - Reserved +; D5 - Reserved +; D4 - Reserved +; D3 - Num Lock +; D2 - Scroll Lock +; D1 - Insert Lock +; D0 - Caps Lock + +; D15 - Keystroke +; D14 +; D13 \ +; D12 \ +; D11 -- Position code (0...5Ah) +; D10 / +; D9 / +; D8 +; D7..D0 - ASCII code + + +UNCODE DW 0 + +WAITKEY LD HL,HOST + LD A,(HEAD) + CP (HL) + JR Z,WAITKEY + CALL GETSYM + LD A,E + AND A + RET + +SCANKEY LD HL,HOST + LD A,(HEAD) + CP (HL) + RET Z + CALL GETSYM + LD A,E + RET + +CTRLKEY LD HL,HOST + LD A,(HEAD) + CP (HL) + LD BC,(KEYFLAG) + LD A,#00 + RET Z + DEC A + RET + +TESTKEY LD HL,HOST + LD A,(HEAD) + CP (HL) + RET Z + LD L,(HL) + LD H,SBUF/256 + LD E,(HL) + INC L + LD D,(HL) + INC L + LD B,(HL) + INC L + LD C,(HL) + LD A,E + RET + +K_CLEAR LD A,(HOST) + LD (HEAD),A + LD A,#2F + CP B + JR C,K_C2 + LD A,1 + SCF + RET + +K_C2 LD A,#35 + CP B + JR NC,K_C3 + LD A,1 + SCF + RET + +K_C3 LD C,B + RST #10 + RET + +PUTSYM LD HL,HEAD + LD A,(HOST) + SUB 4 + AND #3F + CP (HL) + JR Z,FULL_BF + LD A,(HL) + INC (HL) + INC (HL) + INC (HL) + INC (HL) + RES 6,(HL) + LD L,A + LD H,SBUF/256 + LD (HL),E + INC L + LD (HL),D + INC L + LD (HL),B + INC L + LD (HL),C + RET + +GETSYM LD HL,HOST + LD A,(HEAD) + CP (HL) + RET Z + LD A,(HL) + INC (HL) + INC (HL) + INC (HL) + INC (HL) + RES 6,(HL) + LD L,A + LD H,SBUF/256 + LD E,(HL) + INC L + LD D,(HL) + INC L + LD B,(HL) + INC L + LD C,(HL) + RET + +FULL_BF EX AF,AF' + BIT SF_BUFF,(IX+SOUND_K) + JR Z,FBF + EXX + LD DE,230 + LD HL,50 + CALL BEEP + EXX +FBF EX AF,AF' + RET + +E0_KEY SET FLAG_E0,(IX+KEYFLG) + JR RESCAN + +F0_KEY SET FLAG_F0,(IX+KEYFLG) + JR RESCAN + +E1_KEY SET FLAG_E1,(IX+KEYFLG) + JR RESCAN + +KEYSCAN LD IX,KEYFLAG + +RESCAN IN A,(COM_A) + BIT 0,A + RET Z + IN A,(DAT_A) + CP #F0 + JR Z,F0_KEY + CP #E0 + JR Z,E0_KEY + CP #E1 + JR Z,E1_KEY + BIT FLAG_F0,(IX+KEYFLG) + JR NZ,UN_KEY + LD L,A + CALL XLAT + CALL SHIFTS + RES FLAG_E0,(IX+KEYFLG) + RES FLAG_E1,(IX+KEYFLG) + RET Z ;IT'S SHIFT KEY + + CALL INPCODE ;L - AT POS. CODE +; +PUTCODE LD HL,#1C00 ;Caps Lock + AND A + SBC HL,DE + CALL Z,CAPS_X + LD HL,#B800 ;Ctrl + Space + AND A + SBC HL,DE + CALL Z,RUS_X + LD HL,#5000 ;Insert + AND A + SBC HL,DE + CALL Z,INS_X + LD HL,#4900 ;Num Lock + AND A + SBC HL,DE + CALL Z,NUM_X + LD HL,#C900 ;Pause Lock + AND A + SBC HL,DE + CALL Z,PAUSE_X + LD HL,#4800 ;Scroll Lock + AND A + SBC HL,DE + CALL Z,SCL_X + LD HL,#CF00 ;Ctrl + Alt + Del + AND A + SBC HL,DE + CALL Z,RST_X + LD BC,(KEYFLAG) + CALL PUTSYM + RET + +UN_KEY RES FLAG_F0,(IX+KEYFLG) + LD L,A + CALL XLAT + CALL UNSHIFT + RES FLAG_E0,(IX+KEYFLG) + LD H,0 + LD (UNCODE),HL + RET + +CAPS_X LD A,(IX+K_LOCK) + XOR #01 + LD (IX+K_LOCK),A + RET + +RUS_X BIT X_CTRL,(IX+K_SHIFT) + RET Z + LD A,(IX+K_LOCK) + XOR #80 + LD (IX+K_LOCK),A + BIT SF_ALT,(IX+SOUND_K) + RET Z + EXX + LD DE,190 + LD HL,20 + CALL BEEP + EXX + RET + +INS_X LD A,(IX+K_LOCK) + XOR #02 + LD (IX+K_LOCK),A + RET + +NUM_X LD A,(IX+K_LOCK) + XOR #08 + LD (IX+K_LOCK),A + RET + +PAUSE_X BIT X_CTRL,(IX+K_SHIFT) + RET Z + POP HL + LD A,(IX+K_LOCK) + XOR #40 + LD (IX+K_LOCK),A + BIT PAUSE_L,(IX+K_LOCK) + RET Z + EI +PAUSE_ HALT + BIT PAUSE_L,(IX+K_LOCK) + JR NZ,PAUSE_ + DI + RET + +SCL_X LD A,(IX+K_LOCK) + XOR #04 + LD (IX+K_LOCK),A + RET + +RST_X BIT X_CTRL,(IX+K_SHIFT) + RET Z + BIT X_ALT,(IX+K_SHIFT) + RET Z + XOR A + LD BC,#01FD + RST #08 + RET + +UNSHIFT LD A,L + CP #37 ;L ALT + JR NZ,USH1 + RES L_ALT,(IX+K_SHIFT) + BIT R_ALT,(IX+K_SHIFT) + RET NZ + RES X_ALT,(IX+K_SHIFT) + RET +USH1 CP #39 ;R ALT + JR NZ,USH2 + RES R_ALT,(IX+K_SHIFT) + BIT L_ALT,(IX+K_SHIFT) + RET NZ + RES X_ALT,(IX+K_SHIFT) + RET +USH2 CP #36 ;L CTRL + JR NZ,USH3 + RES L_CTRL,(IX+K_SHIFT) + BIT R_CTRL,(IX+K_SHIFT) + RET NZ + RES X_CTRL,(IX+K_SHIFT) + RET +USH3 CP #3A ;R CTRL + JR NZ,USH4 + RES R_CTRL,(IX+K_SHIFT) + BIT L_CTRL,(IX+K_SHIFT) + RET NZ + RES X_CTRL,(IX+K_SHIFT) + RET +USH4 CP #29 ;L SHIFT + JR NZ,USH5 + RES L_SHIFT,(IX+K_SHIFT) + RET +USH5 CP #34 ;R SHIFT + JR NZ,USH6 + RES R_SHIFT,(IX+K_SHIFT) +USH6 RET + +SHIFTS LD A,L + CP #37 ;L ALT + JR NZ,NSH1 + SET L_ALT,(IX+K_SHIFT) + SET X_ALT,(IX+K_SHIFT) + RET +NSH1 CP #39 ;R ALT + JR NZ,NSH2 + SET R_ALT,(IX+K_SHIFT) + SET X_ALT,(IX+K_SHIFT) + RET +NSH2 CP #36 ;L CTRL + JR NZ,NSH3 + SET L_CTRL,(IX+K_SHIFT) + SET X_CTRL,(IX+K_SHIFT) + RET +NSH3 CP #3A ;R CTRL + JR NZ,NSH4 + SET R_CTRL,(IX+K_SHIFT) + SET X_CTRL,(IX+K_SHIFT) + RET +NSH4 CP #29 ;L SHIFT + JR NZ,NSH5 + SET L_SHIFT,(IX+K_SHIFT) + RET +NSH5 CP #34 ;R SHIFT + JR NZ,NSH6 + SET R_SHIFT,(IX+K_SHIFT) +NSH6 RET + +; ORG $/256+1*256 + + ALIGN 256 +; DEFS $/256+1*256-$,0 + +; 0 1 2 3 4 5 6 7 8 9 A B C D E +; F +XLAT_T + DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 + DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 + DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 + DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 + DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 + DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 + DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 + DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 + DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 + +XLAT BIT FLAG_E0,(IX+KEYFLG) + JR Z,W_O_E0 + CP #11 ;Right ALT + LD L,#39 + RET Z + CP #14 ;Right CTRL + LD L,#3A + RET Z + CP #5A ;enter + LD L,#4E + RET Z + CP #4A ; / + LD L,#4A + RET Z + CP #7C ; * - Print Screen + LD L,#47 + RET Z + LD L,A +W_O_E0 LD H,XLAT_T/256 + LD L,(HL) + RET + + +;INPCODE BIT 1,(IX+1) ;00110000 +; JR NZ,FN_KEY ;LRCAcaRP + +INPCODE LD D,L + LD E,0 + BIT LANG_L,(IX+K_LOCK) + JP NZ,RUSCODE + LD A,(IX+K_SHIFT) + AND #C0 + JR NZ,SHIFT_L + SET 7,D + BIT X_ALT,(IX+K_SHIFT) + RET NZ + BIT X_CTRL,(IX+K_SHIFT) + RET NZ + LD D,L + BIT CAPS_L,(IX+K_LOCK) + LD BC,CAPSTAB + JR NZ,CONVER + LD BC,NORMTAB +CONVER LD H,0 + ADD HL,BC + LD E,(HL) + RET + +SHIFT_L LD BC,SHIFTAB + BIT CAPS_L,(IX+K_LOCK) + JR Z,CONVER5 + LD BC,SHF2TAB +CONVER5 LD H,0 + ADD HL,BC + LD E,(HL) + SET 7,D + RET + +RUSCODE LD A,(IX+K_SHIFT) + AND #C0 + JR NZ,SHIFT_R + SET 7,D + BIT X_ALT,(IX+K_SHIFT) + RET NZ + BIT X_CTRL,(IX+K_SHIFT) + RET NZ + LD D,L + BIT CAPS_L,(IX+K_LOCK) + LD BC,CAPSRUS + JR NZ,CONVER2 + LD BC,NORMRUS +CONVER2 LD H,0 + ADD HL,BC + LD E,(HL) + RET + +SHIFT_R LD BC,SHIFRUS + BIT CAPS_L,(IX+K_LOCK) + JR Z,CONVER4 + LD BC,SHF2RUS +CONVER4 LD H,0 + ADD HL,BC + LD E,(HL) + SET 7,D + RET + +K_SETUP INC B + DEC B + JP Z,KEYMAP + DEC B + JP Z,K_SND_R + DEC B + JP Z,K_SND_W + LD A,#0E + SCF + RET + +K_SND_R LD A,(SOUND_K) + AND A + RET + +K_SND_W LD (SOUND_K),A + AND A + RET + +KEYMAP LD BC,ENDNORM-NORMTAB + BIT 7,A + JR NZ,READMAP + LD DE,NORMTAB + OR A + JR Z,LTAB + LD DE,SHIFTAB + DEC A + JR Z,LTAB + LD DE,CAPSTAB + DEC A + JR Z,LTAB + LD DE,SHF2TAB + DEC A + JR Z,LTAB + LD DE,NORMRUS + DEC A + JR Z,LTAB + LD DE,SHIFRUS + DEC A + JR Z,LTAB + LD DE,CAPSRUS + DEC A + JR Z,LTAB + LD DE,SHF2RUS + DEC A + JR Z,LTAB + XOR A + SCF + RET +LTAB LDIR + XOR A + RET + +READMAP RES 7,A + LD DE,NORMTAB + OR A + JR Z,RTAB + LD DE,SHIFTAB + DEC A + JR Z,RTAB + LD DE,CAPSTAB + DEC A + JR Z,RTAB + LD DE,SHF2TAB + DEC A + JR Z,RTAB + LD DE,NORMRUS + DEC A + JR Z,RTAB + LD DE,SHIFRUS + DEC A + JR Z,RTAB + LD DE,CAPSRUS + DEC A + JR Z,RTAB + LD DE,SHF2RUS + DEC A + JR Z,RTAB + XOR A + SCF + RET +RTAB EX DE,HL + LDIR + XOR A + RET + +; ` +; 0 +; Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Back +; 1 2 3 4 5 6 7 8 9 A B C D E +; Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]" +; F 10 11 12 13 14 15 16 17 18 19 1A 1B +; Cps,"A","S","D","F","G","H","J","K","L",";","'",Enter +; 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 +; LSh,"Z","X","C","V","B","N","M",",",".","/",RSh,#5C +; 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 +; LCl,LAt,SPC,Rat,RCl,F01,F02,F03,F04,F05,F06,F07,F08 +; 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 +; F09,F10,F11,F12,prn,scr,num,"/","*","-","+",ent,Del +; 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F +; Ins,End,Dwn,PgD,Lft,"5",Rgh,Hom,Upp,PgU +; 50 51 52 53 54 55 56 57 58 59 +; +;================================ +Esc EQU #1B +Bcs EQU #08 +Tab EQU #09 +Cps EQU #00 +Spc EQU #20 +Ent EQU #0D + +;Standart ASCII tables +NORMTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs + DB Tab,"q","w","e","r","t","y","u","i","o","p","[","]" + DB Cps,"a","s","d","f","g","h","j","k","l",";","'",Ent + DB #00,"z","x","c","v","b","n","m",#2C,".","/",#00,#5C + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 +ENDNORM + +SHIFTAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs + DB Tab,"Q","W","E","R","T","Y","U","I","O","P","{","}" + DB Cps,"A","S","D","F","G","H","J","K","L",":",#22,Ent + DB #00,"Z","X","C","V","B","N","M","<",">","?",#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +CAPSTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs + DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]" + DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent + DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +SHF2TAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs + DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}" + DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent + DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +;Standart Russian tables +NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs + DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA + DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent + DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,#5C + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs + DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A + DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent + DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs + DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A + DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent + DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,#5C + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs + DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA + DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent + DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|" + DB #00,#00,Spc,#00,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + DB #00,#00,#00,"/","*","-","+",Ent,#00 + DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 + +;================================ + +BEEP LD A,#10 + OUT (#FE),A + LD B,D + LD C,E +BPP DEC BC + LD A,B + OR C + JR NZ,BPP + LD A,#00 + OUT (#FE),A + LD B,D + LD C,E +BPP2 DEC BC + LD A,B + OR C + JR NZ,BPP2 + DEC HL + LD A,H + OR L + JR NZ,BEEP + RET + +COM_A EQU #19 +DAT_A EQU #18 + +KINIT LD A,0 + OUT (COM_A),A + LD A,1 + OUT (COM_A),A + LD A,#00 ;#18 + OUT (COM_A),A + LD A,3 + OUT (COM_A),A + LD A,#C1 + OUT (COM_A),A + LD A,4 + OUT (COM_A),A + LD A,#07 ;#05 + OUT (COM_A),A + LD A,5 + OUT (COM_A),A + LD A,#60 + OUT (COM_A),A + RET + +;//MODULE: KEYINTER +;[END] + diff --git a/INTERFACE/LOBJECT.ASM b/INTERFACE/LOBJECT.ASM new file mode 100644 index 0000000..a6fc8f3 --- /dev/null +++ b/INTERFACE/LOBJECT.ASM @@ -0,0 +1,609 @@ + +P_M_OBJ DW #FFFF +P_L_OBJ DW #FFFF +WAITMOD DB #00 +P_MOUSE DB #00 + +; HL - OBJECT +; A - MESSAGE +; 1 - ACTIVE +; 2 - DEACTIVE +; 3 - PRESS LEFT +; 4 - UNPRESS LEFT +; 5 - DRAG +; 6 - DROP +; 7 - PRESS RIGHT +; 8 - UNPRESS RIGHT + + +WAITMSG LD C,5 + CALL INTMOUS + JP C,CLIKMSG + CALL OBJECT + EX DE,HL + LD HL,(P_M_OBJ) + AND A + SBC HL,DE + EX DE,HL + CALL NZ,NEWMOBJ + CALL LOBJECT + EX DE,HL + LD HL,(P_L_OBJ) + AND A + SBC HL,DE + JP Z,WAITMSG + PUSH DE + LD C,3 + CALL INTMOUS + POP DE + OR A + JP Z,NONPRES + CP 1 + JP Z,LFTPRES + CP 2 + JP Z,NONPRES + CP 3 + JP Z,LFTPRES +LFTPRES LD HL,(P_L_OBJ) + LD A,(WAITMOD) + XOR #FF + LD (WAITMOD),A + LD A,5 + RET Z + EX DE,HL + LD (P_L_OBJ),HL + LD A,6 + AND A + RET + +NONPRES LD HL,(P_L_OBJ) + LD A,(WAITMOD) + XOR #FF + LD (WAITMOD),A + LD A,2 + RET Z + EX DE,HL + LD (P_L_OBJ),HL + LD A,1 + AND A + RET + + +CLIKMSG PUSH AF + PUSH HL + PUSH DE + CALL GOBJ + EX DE,HL + LD HL,(P_M_OBJ) + AND A + SBC HL,DE + EX DE,HL + JP Z,CLIKMS2 + CALL NEWMOBJ + POP DE + POP HL + POP AF + SCF + RET + +CLIKMS2 POP DE + POP HL + CALL LOBJ + LD A,(P_MOUSE) + LD C,A + POP AF + LD (P_MOUSE),A + OR A + JP Z,RESPRES + CP 1 + JP Z,FRIPRES + CP 2 + JP Z,SECPRES + CP 3 + JP Z,DUUPRES + +DUUPRES LD A,C + AND 1 + LD A,3 + RET Z + LD A,7 + RET + +RESPRES LD A,C + AND 1 + LD A,4 + RET NZ + LD A,8 + RET + +FRIPRES LD A,C + AND 1 + LD A,3 + RET Z + LD A,8 + RET + +SECPRES LD A,C + AND 2 + LD A,7 + RET Z + LD A,4 + RET + +RE_MOBJ CALL NEWMOBJ + SCF + RET + +NEWMOBJ LD (P_M_OBJ),HL + LD DE,LOBJADR + ADD HL,HL + ADD HL,HL + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + EX DE,HL +; LD (LOBJ_T),HL +; LD (LOBJ_SZ),BC + RET + + +;LOCAL OBJECT DETECTER +; INPUT: NONE +;OUTPUT: +; NC; HL - OBJECT ID +; C; ERROR + +LOBJ PUSH IX + PUSH HL + PUSH DE + JP LOBJC + +LOBJECT PUSH IX + LD C,3 + CALL INTMOUS + PUSH HL + PUSH DE +LOBJC LD IX,(LOBJ_T) ;CURRENT LOCAL OBJECT TABLE + POP HL ;Y MOUSE COORD + LD DE,(WIN_Y) + AND A + SBC HL,DE + EX DE,HL + POP HL ;X MOUSE COORD + LD BC,(WIN_X) + AND A + SBC HL,BC + LD B,H + LD C,L +LOBJ_AG LD L,(IX+2) + LD H,(IX+3) ;OBJECT X-MIN + AND A + SBC HL,BC + JP Z,OBJXYEP + JP NC,LOBJ_NN + LD L,(IX+4) + LD H,(IX+5) ;OBJECT X-MAX + AND A + SBC HL,BC + JP C,LOBJ_NN +LOBJXEP LD L,(IX+6) + LD H,(IX+7) ;OBJECT Y-MIN + AND A + SBC HL,DE + JP Z,LOBJ_EP + JP NC,LOBJ_NN + LD L,(IX+8) + LD H,(IX+9) ;OBJECT Y-MAX + AND A + SBC HL,DE + JP C,LOBJ_NN +LOBJ_EP LD L,(IX+0) ;OBJECT ID + LD H,(IX+1) + POP IX + AND A + RET + +LOBJ_NN EX DE,HL ;NEXT OBJECT + LD DE,10 + ADD IX,DE + EX DE,HL + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,LOBJ_AG + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,LOBJ_AG + POP IX + SCF + RET + +;LOCAL OBJECT CONSTRUCTOR +; INPUT: +; DE/BC - X-MIN/X-MAX +; DE'/BC' - Y-MIN/Y-MAX +; HL - OBJECT ID + +LCONST EXX + PUSH IX + PUSH DE + PUSH BC + LD HL,(LOBJ_T) + LD BC,(LOBJ_SZ) + ADD HL,BC + DEC HL + LD D,H + LD E,L + LD BC,10 + ADD HL,BC + EX DE,HL + LD BC,(LOBJ_SZ) + LDDR + POP BC + POP DE + EXX + LD IX,(LOBJ_T) + LD (IX+0),L + LD (IX+1),H + LD (IX+2),E + LD (IX+3),D + LD (IX+4),C + LD (IX+5),B + EXX + LD (IX+6),E + LD (IX+7),D + LD (IX+8),C + LD (IX+9),B + EXX + LD HL,(LOBJ_SZ) + LD BC,10 + ADD HL,BC + LD (LOBJ_SZ),HL + POP IX + AND A + RET + +;LOCAL OBJECT DESTRUCTOR +; INPUT: +; HL - OBJECT ID +;OUTPUT: +; NC - OBJECT DESTROYED +; C - OBJECT ABSENT + +LDESTR EX DE,HL + PUSH IX + LD IX,(LOBJ_T) + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,LDESTR0 + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,LDESTR0 + POP IX + SCF + RET + +LDESTR0 LD L,(IX+0) + LD H,(IX+1) + AND A + SBC HL,DE + JP NZ,LDESTR1 + LD D,XH + LD E,XL + LD H,D + LD L,E + LD BC,10 + ADD HL,BC + EXX + LD HL,(LOBJ_T) + LD DE,(LOBJ_SZ) + ADD HL,DE + LD D,XH + LD E,XL + AND A + SBC HL,DE + PUSH HL + EXX + POP BC + LDIR + LD HL,(LOBJ_SZ) + LD BC,10 + AND A + SBC HL,BC + LD (LOBJ_SZ),HL + POP IX + AND A + RET + +LDESTR1 LD BC,10 + ADD IX,BC + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,LDESTR0 + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,LDESTR0 + POP IX + SCF + RET + +;GLOBAL OBJECT DETECTER +; INPUT: NONE +;OUTPUT: +; NC; HL - OBJECT ID +; C; ERROR + +GOBJ PUSH IX + PUSH HL + JP GOBJC + +OBJECT PUSH IX + LD C,3 + CALL INTMOUS + PUSH HL +GOBJC POP BC + LD IX,OBJ_TAB ;OBJECT TABLE +OBJ_CNT LD L,(IX+2) + LD H,(IX+3) ;OBJECT X-MIN + AND A + SBC HL,BC + JP Z,OBJXYEP + JP NC,OBJ_NON + LD L,(IX+4) + LD H,(IX+5) ;OBJECT X-MAX + AND A + SBC HL,BC + JP C,OBJ_NON +OBJXYEP LD L,(IX+6) + LD H,(IX+7) ;OBJECT Y-MIN + AND A + SBC HL,DE + JP Z,OBJ_YEP + JP NC,OBJ_NON + LD L,(IX+8) + LD H,(IX+9) ;OBJECT Y-MAX + AND A + SBC HL,DE + JP C,OBJ_NON +OBJ_YEP LD L,(IX+0) ;OBJECT ID + LD H,(IX+1) + POP IX + AND A + RET + +OBJ_NON EX DE,HL ;NEXT OBJECT + LD DE,10 + ADD IX,DE + EX DE,HL + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,OBJ_CNT + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,OBJ_CNT + POP IX + SCF + RET + +_HLX DW #0000 +_DEX DW #0000 +_BCX DW #0000 +_HL DW #0000 +_DE DW #0000 +_BC DW #0000 +STACKR1 + +SAVERG LD A,R + DI + LD (SAVESP+1),SP + LD SP,STACKR1 + PUSH BC + PUSH DE + PUSH HL + EXX + PUSH BC + PUSH DE + PUSH HL + EXX +SAVESP LD SP,#0000 + RET PO + EI + RET + +RESTRG LD A,R + DI + LD (RESTSP+1),SP + LD SP,_HLX + EXX + POP HL + POP DE + POP BC + EXX + POP HL + POP DE + POP BC +RESTSP LD SP,#0000 + RET PO + EI + RET + +;INPUT: +; HL/DE - X/Y +; BC - WIDTH +; BC' - HEIGH +;OUTPUT: +; DE/BC - X-MIN/X-MAX +;DE'/BC' - Y-MIN/Y-MAX + +OPTIMIZ PUSH DE + LD D,H + LD E,L + ADD HL,BC + LD B,H + LD C,L + EXX + POP HL + LD D,H + LD E,L + ADD HL,BC + LD B,H + LD C,L + EXX + RET + +;GLOBAL OBJECT CONSTRUCTOR +; INPUT: +; DE/BC - X-MIN/X-MAX +;DE'/BC' - Y-MIN/Y-MAX +; HL - OBJECT ID + +CONST EXX + PUSH IX + PUSH DE + PUSH BC + LD HL,OBJ_TAB + LD BC,(SZ_OBJ) + ADD HL,BC + DEC HL + LD D,H + LD E,L + LD BC,10 + ADD HL,BC + EX DE,HL + LD BC,(SZ_OBJ) + LDDR + POP BC + POP DE + EXX + LD IX,OBJ_TAB + LD (IX+0),L + LD (IX+1),H + LD (IX+2),E + LD (IX+3),D + LD (IX+4),C + LD (IX+5),B + EXX + LD (IX+6),E + LD (IX+7),D + LD (IX+8),C + LD (IX+9),B + LD HL,(SZ_OBJ) + LD BC,10 + ADD HL,BC + LD (SZ_OBJ),HL + EXX + LD DE,LOBJADR + ADD HL,HL + ADD HL,HL + ADD HL,DE + LD DE,LOBJTAB + LD BC,10 +; LD (HL),E + INC HL +; LD (HL),D + INC HL +; LD (HL),C + INC HL +; LD (HL),B + POP IX + AND A + RET + +;GLOBAL OBJECT DESTRUCTOR +; INPUT: +; HL - OBJECT ID +;OUTPUT: +; NC - OBJECT DESTROYED +; C - OBJECT ABSENT + +DESTR EX DE,HL + PUSH IX + LD IX,OBJ_TAB + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,DESTR0 + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,DESTR0 + POP IX + SCF + RET + +DESTR0 LD L,(IX+0) + LD H,(IX+1) + AND A + SBC HL,DE + JP NZ,DESTR1 + LD D,XH + LD E,XL + LD H,D + LD L,E + LD BC,10 + ADD HL,BC + EXX + LD HL,OBJ_TAB + LD DE,(SZ_OBJ) + ADD HL,DE + LD D,XH + LD E,XL + AND A + SBC HL,DE + PUSH HL + EXX + POP BC + LDIR + LD HL,(SZ_OBJ) + LD BC,10 + AND A + SBC HL,BC + LD (SZ_OBJ),HL + POP IX + AND A + RET + +DESTR1 LD BC,10 + ADD IX,BC + LD A,(IX+1) ;END MARKER? + INC A + JP NZ,DESTR0 + LD A,(IX+0) ;END MARKER? + INC A + JP NZ,DESTR0 + POP IX + SCF + RET + +WIN_X DW 0 +WIN_Y DW 0 +LOBJ_T DW LOBJTAB +LOBJ_SZ DW 10 + +NN_OBJ DW 0 +SZ_OBJ DW 10 + +LOBJADR DW LOBJTAB,10,LOBJTAB,10,LOBJTAB,10 + DS 512 + +; WORD #FEFF ;OBJECT ID +; WORDS 0,320 ;X-MIN -- X-MAX +; WORDS 0,256 ;Y-MIN -- Y-MAX + +OBJ_TAB DW #FFFF ;END MARKER + DW #FFFF,#FFFF ;END MARKER + DW #FFFF,#FFFF ;END MARKER + DS 246 + +; WORD #FEFF ;OBJECT ID +; WORDS 0,320 ;X-MIN -- X-MAX +; WORDS 0,256 ;Y-MIN -- Y-MAX + +LOBJTAB DW #FFFF ;END MARKER + DW #FFFF,#FFFF ;END MARKER + DW #FFFF,#FFFF ;END MARKER + DS 2038 + + diff --git a/INTERFACE/NEWFSIZ.TXT b/INTERFACE/NEWFSIZ.TXT new file mode 100644 index 0000000..f83cb14 --- /dev/null +++ b/INTERFACE/NEWFSIZ.TXT @@ -0,0 +1,16 @@ + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,3,5,6,6,7,7,3,4,4,6,6,4,6,3,6 + DB 6,4,6,6,6,6,6,6,6,6,3,4,5,7,5,6 + DB 6,6,6,6,6,6,6,6,6,4,5,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,4,6,4,5,6 + DB 3,6,6,6,6,6,5,6,6,4,5,5,4,6,6,6 + DB 6,6,6,6,5,6,6,6,6,6,6,4,3,4,6,6 + DB 6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6 + DB 6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 + DB 6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6 + DB 6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,1 \ No newline at end of file diff --git a/INTERFACE/WINDOW-H.ASM b/INTERFACE/WINDOW-H.ASM new file mode 100644 index 0000000..e1a2c19 --- /dev/null +++ b/INTERFACE/WINDOW-H.ASM @@ -0,0 +1,2034 @@ + +PAGE0: EQU #82 +PAGE1: EQU #A2 +PAGE2: EQU #C2 +PAGE3: EQU #E2 +Y_PORT: EQU #89 + +CAPSI: EQU 23658 +LAST_K: EQU 23560 + +M_ITEM: EQU #01 +M_GRAY: EQU #02 +M_BAR: EQU #04 +M_END: EQU #80 + +INIT: LD BC,#0880 ;OPEN 320x256 256COLOR + LD HL,#4000 + LD E,1 + CALL #3D13 + LD HL,COLORS ;SET DESKTOP PALETTE + LD DE,#12EE ;& CURSOR COLORS + LD BC,#FFA4 ;#EE,#EF + XOR A + CALL #3D13 + LD BC,256 ;CLEAR SCREEN + EXX + LD HL,0 + LD D,H + LD E,L + LD BC,320 + LD A,GREEN + CALL RECTAN + RET + +BLACK: EQU #F0 +RED: EQU #F1 +GREEN: EQU #F2 +YELLOW: EQU #F3 +BLUE: EQU #F4 +MAGENTA: EQU #F5 +CYAN: EQU #F6 +DGRAY: EQU #F7 +GRAY: EQU #F8 +BRED: EQU #F9 +BGREEN: EQU #FA +BYELLOW: EQU #FB +BBLUE: EQU #FC +BMAGENT: EQU #FD +BCYAN: EQU #FE +WHITE: EQU #FF + +COLORS: ; B G R + DEFB #00,#00,#00,#00 ;CURSOR + DEFB #FF,#FF,#FF,#00 ;CURSOR + + DEFB #00,#00,#00,#00 ;BLACK + DEFB #00,#00,#80,#00 ;RED + DEFB #00,#80,#00,#00 ;GREEN + DEFB #00,#80,#80,#00 ;YELLOW + DEFB #80,#00,#00,#00 ;BLUE + DEFB #80,#00,#80,#00 ;MAGENTA + DEFB #80,#80,#00,#00 ;CYAN + DEFB #80,#80,#80,#00 ;BLACK/GRAY + DEFB #C0,#C0,#C0,#00 ;WHITE/GRAY + DEFB #00,#00,#FF,#00 ;RED + DEFB #00,#FF,#00,#00 ;GREEN + DEFB #00,#FF,#FF,#00 ;YELLOW + DEFB #FF,#00,#00,#00 ;BLUE + DEFB #FF,#00,#FF,#00 ;MAGENTA + DEFB #FF,#FF,#00,#00 ;CYAN + DEFB #FF,#FF,#FF,#00 ;WHITE + +; HL/DE - X/Y +; A - COLOR + +;POINT + +POINT: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + LD DE,#4040 + ADD HL,DE + EX AF,AF' + LD (HL),A + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +XORPIX: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + LD DE,#4040 + ADD HL,DE + LD A,(HL) + CPL + LD (HL),A + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + + + + + + + +; HL/E - X/Y +; BC - SIZE +; A - COLOR + +;HORIZONTAL LINE DRAWER + +HZLINE: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + LD DE,#4040 + ADD HL,DE + EX AF,AF' + LD D,H + LD E,L + LD (HL),A + INC DE + DEC BC + LDIR + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +; HL/E - X/Y +; BC - SIZE +; A - COLOR + +;HORIZONTAL PUNKTIR LINE DRAWER + +HRUBBER: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + LD DE,#4040 + ADD HL,DE + EX AF,AF' + LD D,A +RUBB1: LD (HL),D + INC HL + DEC BC + LD A,B + OR C + JR Z,RUBB2 + INC HL + DEC BC + LD A,B + OR C + JR NZ,RUBB1 +RUBB2: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;VERTICAL PUNKTIR LINE DRAWER + +; HL/E - X/Y +; BC - SIZE +; A - COLOR + +VRUBBER: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD D,A + EX AF,AF' + LD E,A +VRUB2: LD A,E + OUT (Y_PORT),A + LD (HL),D + DEC BC + LD A,B + OR C + JR Z,VRUB3 + INC E + INC E + DEC BC + LD A,B + OR C + JP NZ,VRUB2 +VRUB3: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +XFRAME: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + LD DE,#4040 + ADD HL,DE + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC +XFRM0: LD A,(HL) + CPL + LD (HL),A + INC HL + INC HL + DEC BC + LD A,B + OR C + JR Z,XFRM1 + DEC BC + LD A,B + OR C + JR Z,XFRM1 + JP XFRM0 +XFRM1: POP BC + POP HL +XFRM2: EXX + DEC BC + LD A,B + OR C + JR Z,XFRM3 + DEC BC + LD A,B + OR C + JR Z,XFRM3 + EXX + EX AF,AF' + INC A + JR Z,XFRM5 + INC A + JR Z,XFRM5 + OUT (Y_PORT),A + EX AF,AF' + LD D,H + LD E,L + LD A,(HL) + CPL + LD (HL),A + ADD HL,BC + LD A,(HL) + CPL + LD (HL),A + LD H,D + LD L,E + JP XFRM2 +XFRM3: EXX + EX AF,AF' + INC A + JR Z,XFRM5 + INC A + JR Z,XFRM5 + OUT (Y_PORT),A + EX AF,AF' + INC HL +XFRM4: LD A,(HL) + CPL + LD (HL),A + INC HL + INC HL + DEC BC + LD A,B + OR C + JR Z,XFRM5 + DEC BC + LD A,B + OR C + JR Z,XFRM5 + JP XFRM4 +XFRM5: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +; BC - SIZE + +;HORIZONTAL LINE DRAWER (BAR) + +HZ2LINE: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + OUT (Y_PORT),A + EX AF,AF' + LD DE,#4040 + ADD HL,DE + PUSH HL + PUSH BC + LD D,H + LD E,L + LD A,(SHADW_) + LD (HL),A + INC DE + DEC BC + LDIR + POP BC + POP HL + EX AF,AF' + INC A +HZ202: OUT (Y_PORT),A + LD D,H + LD E,L + LD A,(LSHADW_) + LD (HL),A + INC DE + DEC BC + LDIR + POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;VERTICAL LINE DRAWER + +; HL/E - X/Y +; BC - SIZE +; A - COLOR + +VRLINE: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD D,A + EX AF,AF' + LD E,A +VR002: LD A,E + OUT (Y_PORT),A + LD (HL),D + DEC BC + LD A,B + OR C + JR Z,VR003 + INC E + JP NZ,VR002 +VR003: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +DFRAME: PUSH HL + PUSH DE + PUSH BC + EXX + PUSH BC + EXX + INC HL + INC DE + LD A,(LSHADW_) + CALL FRAME + POP BC + EXX + POP BC + POP DE + POP HL + LD A,(SHADW_) + JP FRAME + + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT +; A - COLOR + +FRAME: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + LD DE,#4040 + ADD HL,DE + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + LDIR + POP BC + POP HL + EXX + LD E,A + DEC BC + LD A,B + OR C + JR Z,FRM05 + DEC BC + LD A,B + OR C + LD A,E + EXX + JR Z,FRM03 + EX AF,AF' + INC A + DEC BC +FRM02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD (HL),A + ADD HL,BC + LD (HL),A + POP BC + POP HL + EXX + LD E,A + DEC BC + LD A,B + OR C + LD A,E + EXX + JR Z,FRM03 + EX AF,AF' + INC A + JP NZ,FRM02 +FRM03: EX AF,AF' + INC A +FRM04: OUT (Y_PORT),A + EX AF,AF' + LD (HL),A + LD D,H + LD E,L + INC DE + LDIR +FRM05: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT +; A - COLOR + +RECTAN: PUSH HL + EX AF,AF' + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD D,A + EX AF,AF' +REC02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC +REC01: LD (HL),D + INC HL + DEC BC + LD A,B + OR C + JP NZ,REC01 + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + EXX + JR Z,REC03 + EX AF,AF' + INC A + JP NZ,REC02 +REC03: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - HEIGHT/WIDTH +;IX - BITMAP + +SPR_256: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + PUSH IX + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + POP DE + EX DE,HL + EX AF,AF' +SPR02H: OUT (Y_PORT),A + EX AF,AF' + PUSH DE + PUSH BC + LD B,0 + LDIR + POP BC + POP DE + DEC B + JR Z,SPR03H + EX AF,AF' + INC A + JP NZ,SPR02H +SPR03H: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +BPUSH: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + EX AF,AF' + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(DSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + LDIR + LD A,(LSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + JR Z,BPS05 + DEC BC + LD A,B + OR C + EXX + JR Z,BPS03 + EX AF,AF' + INC A + DEC BC +BPS02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(DSHADW_) + LD (HL),A + ADD HL,BC + LD A,(LSHADW_) + LD (HL),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + EXX + JR Z,BPS03 + EX AF,AF' + INC A + JP NZ,BPS02 +BPS03: EX AF,AF' + INC A +BPS04: OUT (Y_PORT),A + EX AF,AF' + LD A,(LSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + LDIR +BPS05: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +BPOP: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + EX AF,AF' + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(LSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + LDIR + LD A,(DSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + JR Z,BPP05 + DEC BC + LD A,B + OR C + EXX + JR Z,BPP03 + EX AF,AF' + INC A + DEC BC +BPP02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(LSHADW_) + LD (HL),A + ADD HL,BC + LD A,(DSHADW_) + LD (HL),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + EXX + JR Z,BPP03 + EX AF,AF' + INC A + JP NZ,BPP02 +BPP03: EX AF,AF' + INC A +BPP04: OUT (Y_PORT),A + EX AF,AF' + LD A,(DSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + LDIR +BPP05: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + + + + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +PLANE: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + EX AF,AF' + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(LSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + LDIR + LD A,(DSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + JR Z,PLN05 + DEC BC + LD A,B + OR C + EXX + JR Z,PLN03 + EX AF,AF' + INC A +PLN02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(LSHADW_) + LD (HL),A + INC HL + LD A,(BODY) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + DEC BC + LDIR + LD A,(DSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + EXX + JR Z,PLN03 + EX AF,AF' + INC A + JP NZ,PLN02 +PLN03: EX AF,AF' + INC A +PLN04: OUT (Y_PORT),A + EX AF,AF' + LD A,(DSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + LDIR +PLN05: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +;HL/DE - X/Y +;BC - WIDTH +;BC'- HEIGHT + +PLACE: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + EX AF,AF' + OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(DSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + LDIR + LD A,(LSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + JR Z,PLC05 + DEC BC + LD A,B + OR C + EXX + JR Z,PLC03 + EX AF,AF' + INC A +PLC02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC + LD A,(DSHADW_) + LD (HL),A + INC HL + LD A,(BODY) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + DEC BC + DEC BC + LDIR + LD A,(LSHADW_) + LD (DE),A + POP BC + POP HL + EXX + DEC BC + LD A,B + OR C + EXX + JR Z,PLC03 + EX AF,AF' + INC A + JP NZ,PLC02 +PLC03: EX AF,AF' + INC A +PLC04: OUT (Y_PORT),A + EX AF,AF' + LD A,(LSHADW_) + LD (HL),A + LD D,H + LD E,L + INC DE + DEC BC + LDIR +PLC05: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +PCHARB: LD (TEMPX),HL + LD (TEMPY),DE + LD D,XH + LD E,XL + EX DE,HL +PRINTB: LD A,(HL) + PUSH BC + PUSH HL + CALL PRINT + POP HL + POP BC + INC HL + DJNZ PRINTB + RET + +CHARS: LD (TEMPX),HL + LD (TEMPY),DE + PUSH IX + POP HL +PRINTZ: LD A,(HL) + INC HL + OR A + RET Z + PUSH HL + CALL PRINT + POP HL + JP PRINTZ + +PCHARX: LD (TEMPX),HL + LD (TEMPY),DE + PUSH BC + POP HL +PCHARZ: LD A,(HL) + INC HL + OR A + RET Z + PUSH HL + CALL PRINT + POP HL + JP PCHARZ + +BODY: DEFB #00 +TEMPX: DEFW 0 +TEMPY: DEFW 0 + +PRINT: +CHAR: LD C,A + LD B,FONTSIZ/256 + PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,(BC) + INC B + PUSH BC + LD C,A + LD B,8 + EXX + LD HL,(TEMPX) + LD C,A + LD B,0 + ADD HL,BC + LD (TEMPX),HL + SBC HL,BC + LD DE,(TEMPY) + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + POP BC + LD A,(BODY) + LD D,A + EX AF,AF' + LD E,A +PINT000: LD A,E + OUT (Y_PORT),A + LD A,(BC) + PUSH BC + LD C,A + EXX + LD A,8 + SUB C + JP Z,NONMV + LD HL,PINT001 + LD DE,5 +NXTMV: ADD HL,DE + DEC A + JP NZ,NXTMV + PUSH HL ;JP HL + EXX + LD A,C + RET + +NONMV: EXX + LD A,C +PINT001: RLCA + JR NC,PINT002 + LD (HL),D +PINT002: INC HL + RLCA + JR NC,PINT012 + LD (HL),D +PINT012: INC HL + RLCA + JR NC,PINT022 + LD (HL),D +PINT022: INC HL + RLCA + JR NC,PINT032 + LD (HL),D +PINT032: INC HL + RLCA + JR NC,PINT042 + LD (HL),D +PINT042: INC HL + RLCA + JR NC,PINT052 + LD (HL),D +PINT052: INC HL + RLCA + JR NC,PINT062 + LD (HL),D +PINT062: INC HL + RLCA + JR NC,PINT072 + LD (HL),D +PINT072: INC HL + EXX + LD A,C + EXX + LD B,0 + LD C,A + AND A + SBC HL,BC + POP BC + INC B + EXX + DEC B + EXX + JP Z,PINT005 + INC E + JP NZ,PINT000 +PINT005: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +LIGHT: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD A,(HLIGHP_) + LD D,A + LD A,(WINDOW_) + LD E,A + EX AF,AF' +LGH02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC +LGH01: LD A,(HL) + CP E + JR Z,LGH04 + LD A,(HLIGHI_) + LD (HL),A + JR LGH05 +LGH04: LD (HL),D +LGH05: INC HL + DJNZ LGH01 + POP BC + POP HL + DEC C + JR Z,LGH03 + EX AF,AF' + INC A + JP NZ,LGH02 +LGH03: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + +DARK: PUSH HL + IN A,(PAGE1) + LD H,A + IN A,(Y_PORT) + LD L,A + EX (SP),HL + LD A,#50 + OUT (PAGE1),A + LD A,E + EX AF,AF' + LD DE,#4040 + ADD HL,DE + LD A,(WINDOW_) + LD D,A + LD A,(HLIGHP_) + LD E,A + EX AF,AF' +DRK02: OUT (Y_PORT),A + EX AF,AF' + PUSH HL + PUSH BC +DRK01: LD A,(HL) + CP E + JR Z,DRK04 + LD A,(WTEXT_) + LD (HL),A + JR DRK05 +DRK04: LD (HL),D +DRK05: INC HL + DJNZ DRK01 + POP BC + POP HL + DEC C + JR Z,DRK03 + EX AF,AF' + INC A + JP NZ,DRK02 +DRK03: POP BC + LD A,B + OUT (PAGE1),A + LD A,C + OUT (Y_PORT),A + XOR A + RET + + +LBAR: LD L,A + LD H,0 + ADD HL,HL + LD DE,XTABLE + ADD HL,DE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + LD DE,(MAIN_VY) + ADD HL,DE + EX DE,HL + LD HL,(MAIN_VX) + INC HL + LD BC,(MAIN_W) + DEC BC + DEC BC + LD B,C + LD C,10 + JP LIGHT + +DBAR: LD L,A + LD H,0 + ADD HL,HL + LD DE,XTABLE + ADD HL,DE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + LD DE,(MAIN_VY) + ADD HL,DE + EX DE,HL + LD HL,(MAIN_VX) + INC HL + LD BC,(MAIN_W) + DEC BC + DEC BC + LD B,C + LD C,10 + JP DARK + + +VERT_A: LD DE,3 + LD IX,XTABLE + XOR A + EX AF,AF' +VERT_A1: LD A,(HL) + INC HL + CP M_END + JP Z,VERT_A2 + CP M_BAR + CALL Z,ADDBARL + CP M_GRAY + CALL Z,ADDITM + CP M_ITEM + CALL Z,ADDITM + JP VERT_A1 + +VERT_A2: INC DE + INC DE + EX AF,AF' + LD (MAX_V_P),A + RET + +ADDITM: LD (IX+0),E + LD (IX+1),D + INC IX + INC IX + EX DE,HL + LD BC,10 + ADD HL,BC + EX DE,HL + XOR A + LD BC,#1000 + CPIR + EX AF,AF' + INC A + EX AF,AF' + INC HL + INC HL + RET + +ADDBARL: EX DE,HL + LD BC,5 + ADD HL,BC + EX DE,HL + RET + +HBAR: LD (DESC_H),IX + LD (MAIN_HX),HL + LD (MAIN_HY),DE + CALL MAKE_HT + XOR A + LD (CUR_H_P),A + LD (OPENFLG+1),A + CALL LHBAR +KCH: CALL OPENFLG +; CALL KEY +KCHL: CP #09 + JP Z,INCSELH + CP #08 + JP Z,DECSELH + CP #0A + JP Z,OPNSELH + CP #0D + JP Z,OPNSELH + RET + +OPNSELH: LD A,#01 + LD (OPENFLG+1),A + JP KCH +OPENFLG: LD A,#00 + OR A + JP Z,KEY + LD A,(CUR_H_P) + LD HL,(DESC_H) + INC A + LD B,A + CALL GET_XX1 + DEC HL + LD D,(HL) + DEC HL + LD E,(HL) + LD XH,D + LD XL,E + CALL POPUP + CP #0D + RET NZ + POP BC + RET + +GET_XX1: LD A,(HL) + INC HL + CP M_END + RET Z + CP M_BAR + JP Z,GET_XX1 + CP M_ITEM + JP Z,GET_XX2 + CP M_GRAY + JP NZ,GET_XX1 +GET_XX2: LD E,B + LD BC,#1000 + XOR A + CPIR + INC HL + INC HL + LD B,E + DJNZ GET_XX1 + RET + +INCSELH: LD A,(CUR_H_P) + PUSH AF + CALL DHBAR + POP AF + LD HL,MAX_H_P + INC A + CP (HL) + JR NZ,INCSH1 + XOR A +INCSH1: LD (CUR_H_P),A + CALL LHBAR + JP KCH + +DECSELH: LD A,(CUR_H_P) + PUSH AF + CALL DHBAR + POP AF + OR A + JR NZ,DECSH1 + LD A,(MAX_H_P) +DECSH1: DEC A + LD (CUR_H_P),A + CALL LHBAR + JP KCH + +LHBAR: LD E,A + LD L,A + LD H,0 + LD D,H + ADD HL,HL + ADD HL,DE + LD DE,YTABLE + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD B,(HL) + LD C,10 + LD HL,(MAIN_HY) + EX DE,HL + JP LIGHT + +DHBAR: LD E,A + LD L,A + LD H,0 + LD D,H + ADD HL,HL + ADD HL,DE + LD DE,YTABLE + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD B,(HL) + LD C,10 + LD HL,(MAIN_HY) + EX DE,HL + JP DARK + +MAKE_HT: LD DE,(DESC_H) + LD IX,YTABLE + LD HL,(MAIN_HX) + XOR A + EX AF,AF' +MAKE_H1: LD A,(DE) + INC DE + CP M_ITEM + JP NZ,MAKE_H2 + LD (IX+0),L + LD (IX+1),H + PUSH HL + CALL LENSTR + POP HL + LD (IX+2),C + ADD HL,BC + INC IX + INC IX + INC IX + EX AF,AF' + INC A + EX AF,AF' + INC DE + INC DE + JP MAKE_H1 + +MAKE_H2: EX AF,AF' + LD (MAX_H_P),A + RET + +POPUP: LD (DESC_V),IX + LD L,(IX+0) + LD H,(IX+1) + LD E,(IX+2) + LD D,(IX+3) + LD C,(IX+4) + LD B,(IX+5) + LD (MAIN_VX),HL + LD (MAIN_VY),DE + LD (MAIN_W),BC + EXX + LD HL,(DESC_V) + LD DE,6 + ADD HL,DE + CALL VERT_A + LD C,E + LD B,D + LD (MAIN_L),BC + EXX + CALL PUTW + XOR A + LD (CUR_V_P),A + CALL LBAR +KC: CALL KEY + CP #0A + JP Z,INCSEL + CP #0B + JP Z,DECSEL + CP #0D + JP Z,RUNSEL + SCF + RET + +RUNSEL: LD A,(CUR_V_P) + LD HL,(DESC_V) + INC A + LD B,A + CALL GET_XX1 + DEC HL + LD D,(HL) + DEC HL + LD E,(HL) + EX DE,HL + LD A,#0D + AND A + RET + +INCSEL: LD A,(CUR_V_P) + PUSH AF + CALL DBAR + POP AF + LD HL,MAX_V_P + INC A + CP (HL) + JR NZ,INCSV1 + XOR A +INCSV1: LD (CUR_V_P),A + CALL LBAR + JP KC + +DECSEL: LD A,(CUR_V_P) + PUSH AF + CALL DBAR + POP AF + OR A + JR NZ,DECSV1 + LD A,(MAX_V_P) +DECSV1: DEC A + LD (CUR_V_P),A + CALL LBAR + JP KC + +PUTW: LD A,(WINDOW_) + LD (BODY),A + CALL PLANE + LD HL,(MAIN_VY) + LD DE,5 + ADD HL,DE + LD (POSS_Y),HL + LD HL,(MAIN_VX) + LD BC,8 + ADD HL,BC + LD (POSS_X),HL + + LD HL,(DESC_V) + LD DE,6 + ADD HL,DE +POPUP1: LD A,(HL) + INC HL + CP M_END + RET Z + CP M_BAR + JP Z,BARR01 + CP M_ITEM + EX DE,HL + LD XH,D + LD XL,E + LD HL,(POSS_X) + LD DE,(POSS_Y) +;;;;;;; + LD A,(WTEXT_) + LD (BODY),A + CALL CHARS + EX DE,HL + LD HL,(POSS_Y) + LD BC,10 + ADD HL,BC + LD (POSS_Y),HL + EX DE,HL + INC HL + INC HL + JP POPUP1 + +BARR01: PUSH HL + LD HL,(MAIN_VX) + INC HL + LD DE,(POSS_Y) + LD BC,(MAIN_W) + DEC BC + DEC BC + CALL HZ2LINE + LD HL,(POSS_Y) + LD BC,5 + ADD HL,BC + LD (POSS_Y),HL + POP HL + JP POPUP1 + +CUR_V_P: DEFB 0 +MAX_V_P: DEFB 0 +CUR_H_P: DEFB 0 +MAX_H_P: DEFB 0 + +MAIN_X: DEFW 0 +MAIN_Y: DEFW 0 +DESC_V: DEFW 0 +DESC_H: DEFW 0 +MAIN_HX: DEFW 0 +MAIN_HY: DEFW 0 +MAIN_VX: DEFW 0 +MAIN_VY: DEFW 0 +MAIN_W: DEFW 0 +MAIN_L: DEFW 0 +POSS_X: DEFW 0 +POSS_Y: DEFW 0 + +XTABLE: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +YTABLE: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +EDITBOX: PUSH IX + LD (EDITX),HL + LD (EDITY),DE + LD (EDITCX),BC + LD A,(IX+1) + LD (POSIT),A + XOR A + LD (SHIFT),A + POP HL + INC HL + INC HL + LD (ETXS),HL +EDIT1: CALL PRINBOX + CALL CURSORH + CALL KEY + CP 14 + RET Z + CP 13 + JP Z,PRINBOX + CP 11 + RET Z + CP 10 + RET Z + CP 4 + RET Z + CP 5 + RET Z + LD HL,EDIT1 + PUSH HL + CP 6 + JP Z,CAPS + CP 7 + JP Z,RUSL + CP 8 + JP Z,BACK + CP 9 + JP Z,FORW + CP 12 + JP Z,DELET + CP #20 + RET C + EX AF,AF' + LD A,(IX+1) + CP (IX+0) + CCF + RET C + LD A,(IX+1) + LD E,A + LD D,0 + LD HL,(ETXS) + ADD HL,DE + LD A,(POSIT) + LD E,A + LD A,(IX+1) + SUB E + JR Z,ADD_SM + LD B,D + LD C,A + LD D,H + LD E,L + DEC HL + LDDR + EX DE,HL +ADD_SM: EX AF,AF' + LD (HL),A + LD A,(POSIT) + INC A + LD (POSIT),A + INC (IX+1) + LD HL,(ETXE) + INC HL + LD (ETXE),HL + LD HL,SHIFT + SUB (HL) + RET Z +ADDL1: PUSH AF + LD HL,(SH+1) + LD DE,(ETXS) + ADD HL,DE + EX DE,HL + CALL REALXX + LD B,A + POP AF + SUB B + RET Z + LD HL,SHIFT + LD E,A + LD A,(HL) + ADD A,E + LD (HL),A + LD A,(POSIT) + SUB (HL) + JP NZ,ADDL1 + RET + +BACK: LD A,(POSIT) + OR A + RET Z ;JP Z,BCK + DEC A + LD (POSIT),A + INC A + LD HL,SHIFT + SUB (HL) + RET NZ + LD A,(STEP) + LD E,A + LD A,(HL) + SUB E + LD (HL),A + RET + +CAPS: LD A,(CAPSI) + XOR 8 + LD (CAPSI),A + RET + +RUSL: LD A,(LANG+1) + XOR 1 + LD (LANG+1),A + RET + +FORW: LD A,(POSIT) + CP (IX+1) + RET Z ; JP Z,FRD + INC A + LD (POSIT),A + LD HL,SHIFT + SUB (HL) + RET Z +ADDL2: PUSH AF + LD HL,(SH+1) + LD DE,(ETXS) + ADD HL,DE + EX DE,HL + CALL REALXX + LD B,A + POP AF + SUB B + RET Z + LD HL,SHIFT + LD E,A + LD A,(HL) + ADD A,E + LD (HL),A + LD A,(POSIT) + SUB (HL) + JP NZ,ADDL2 + RET + +DELET: LD A,(POSIT) + OR A + RET Z ; JP Z,LINKSTR + LD HL,(ETXS) + LD E,A + LD D,0 + ADD HL,DE + LD A,(IX+1) + SUB E + JR Z,SUB_SM + LD B,D + LD C,A + LD D,H + LD E,L + DEC DE + LDIR +SUB_SM: XOR A + DEC HL + LD (HL),A + LD A,(POSIT) + DEC A + LD (POSIT),A + DEC (IX+1) + LD HL,(ETXE) + DEC HL + LD (ETXE),HL + LD A,(SHIFT) + OR A + RET Z + DEC A + LD (SHIFT),A + RET + +KEY: RES 5,(IY+1) + EI +KEY1: BIT 5,(IY+1) + JP Z,KEY1 + LD A,(23560) + CP #20 + RET C + CP 203 + JR NZ,KE_1 + LD A,125 +KE_1: CP 204 + JR NZ,KE_2 + LD A,123 +KE_2: CP 205 + JR NZ,KE_3 + LD A,92 +KE_3: CP 195 + JR NZ,KE_4 + LD A,124 +KE_4: CP 226 + JR NZ,KE_6 + LD A,126 +KE_6: CP 197 + JR NZ,KE_7 + LD A,93 +KE_7: CP 198 + JR NZ,KE_8 + LD A,91 +KE_8: +LANG: LD B,0 + INC B + DEC B + CALL NZ,RUSCOR + LD (LAST_K),A + RET + +RUSCOR: CP 65 + RET C + LD HL,FOR_RUS-65 + ADD A,L + LD L,A + JR NC,$+3 + INC H + LD B,(HL) + LD A,(23658) + XOR 8 + LD A,B + RET Z + CP 154 + JR NZ,RUS_1 + LD A,234 + RET +RUS_1: CP 158 + JR NZ,RUS_2 + LD A,238 + RET +RUS_2: CP 152 + JR NZ,RUS_3 + LD A,232 + RET +RUS_3: CP 157 + JR NZ,RUS_4 + LD A,237 + RET +RUS_4: CP 153 + JR NZ,RUS_5 + LD A,233 + RET +RUS_5: CP 151 + RET NZ + LD A,231 + RET +FOR_RUS: DEFB 128,129 ;START FROM 65 + DEFB 150,132,133,148,131,149,136,137 + DEFB 138,139,140,141,142,143,159,144 + DEFB 145,146,147,134,130,156,155,135 + DEFB 91 + DEFB 154,93,94,95,158 + DEFB 160,161 + DEFB 230,164,165,228,163,229,168,169 + DEFB 170,171,172,173,174,175,239,224 + DEFB 225,226,227,166,162,236,235,167 + DEFB 152,157,153,151 + +PRINBOX: PUSH IX + LD DE,(ETXS) + PUSH DE + LD HL,(EDITX) + LD DE,(EDITY) + LD BC,(EDITCX) + EXX + LD BC,12 + EXX + LD A,(WRKSPC_) + LD (BODY),A + CALL PLACE + LD A,(WTEXT_) + LD (BODY),A + POP HL +SH: LD BC,#0000 + ADD HL,BC + LD A,(IX+1) + SUB C + EX DE,HL + LD XH,D + LD XL,E + CALL REALXX + LD B,A + PUSH BC + LD HL,(EDITX) + LD DE,(EDITY) + INC HL + INC HL + INC HL + INC DE + INC DE + INC DE + PUSH IX + CALL PCHARB + POP DE + POP BC +NPRINT: POP IX + EI + RET + +SHIFT: EQU SH+1 + +CURSORH: LD A,(SHIFT) + LD C,A + LD A,(POSIT) + SUB C + LD BC,0 + JR Z,HOM1 + CALL LENSYM +HOM1: LD HL,(EDITX) + LD DE,(EDITY) + INC HL + INC HL + INC DE + INC DE + ADD HL,BC + LD BC,8 + LD A,(WTEXT_) + JP VRLINE + +REALXX: PUSH AF + PUSH DE + CALL LENSYM + LD HL,(EDITCX) + DEC HL + DEC HL + DEC HL + AND A + SBC HL,BC + POP DE + JP NC,REALXX2 + POP AF + DEC A + JP REALXX +REALXX2: POP AF + RET + +STEP: DEFB 1 + +EDITX: DEFW 0 +EDITY: DEFW 0 +EDITCX: DEFW 0 + +POSIT: DEFB #00 +ETXS: DEFW 0 +ETXE: DEFW 0 +; +0 - Size buffer +; +1 - Amount simbols +; -1 - Scroll Window + + +; DE - ASCIIZ +; BC - LENGHT ASCIIZ IN PIXELS + +LENSTR: LD H,FONTSIZ/256 + LD BC,0 +LENSTR1: LD A,(DE) + INC DE + OR A + RET Z + LD L,A + LD A,(HL) + ADD A,C + JR NC,LENSTR2 + INC B +LENSTR2: LD C,A + JP LENSTR1 + +; DE - ASCII STRING +; A - SIZE STRING IN SIMBOLS +; BC - LENGHT STRING IN PIXELS + +LENSYM: LD H,FONTSIZ/256 + LD BC,0 +LENSYM1: EX AF,AF' + LD A,(DE) + INC DE + LD L,A + LD A,(HL) + ADD A,C + JR NC,LENSYM2 + INC B +LENSYM2: LD C,A + EX AF,AF' + DEC A + JP NZ,LENSYM1 + RET + +SYSCOLR: +SBAR_: DEFB GRAY +BUTTON_: DEFB GRAY +DESKTP_: DEFB GREEN +ACAPT_: DEFB BBLUE +ICAPT_: DEFB GRAY +WINDOW_: DEFB GRAY +LSHADW_: DEFB WHITE +DSHADW_: DEFB BLACK +SHADW_: DEFB DGRAY +WTEXT_: DEFB BLACK +BTEXT_: DEFB BLACK +CTEXT_: DEFB WHITE +GTEXT_: DEFB WHITE +WRKSPC_: DEFB WHITE +HLIGHP_: DEFB BBLUE +HLIGHI_: DEFB WHITE + + diff --git a/SPRITE_.ASM b/SPRITE_.ASM new file mode 100644 index 0000000..0fab0ff --- /dev/null +++ b/SPRITE_.ASM @@ -0,0 +1,264 @@ + +X EQU BLACK +g EQU DGRAY +G EQU GRAY +W EQU WHITE +Y EQU BYELLOW +y EQU YELLOW +u EQU BLUE + +SPRITE_ + DEFW 149 ;SIZE + DEFW 11 ;CX + DEFW 13 ;CY + DEFB X,X,X,X,X,X,X,X,G,G,G + DEFB X,W,W,W,W,W,W,X,X,G,G + DEFB X,W,W,W,W,W,W,X,W,X,G + DEFB X,W,W,W,W,W,W,X,X,X,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,W,W,W,W,W,W,W,W,W,X + DEFB X,X,X,X,X,X,X,X,X,X,X + +;SPRITE 2 + DEFW 202 ;SIZE + DEFW 14 ;CX + DEFW 14 ;CY + DEFB g,g,g,g,g,g,g,g,g,g,g,g,g,X + DEFB g,W,W,W,W,W,W,W,W,W,W,W,W,X + DEFB g,W,W,W,W,W,W,W,W,W,W,W,W,X + DEFB g,W,W,W,W,W,W,W,W,W,W,W,W,X + DEFB g,g,g,g,g,g,g,g,g,g,g,g,g,X + DEFB g,g,g,g,g,g,X,X,g,g,g,g,g,X + DEFB g,g,g,g,g,X,g,g,W,g,g,g,g,X + DEFB g,g,g,g,g,X,g,g,W,g,g,g,g,X + DEFB g,g,g,g,g,g,W,W,g,g,g,g,g,X + DEFB g,g,g,g,g,g,g,g,g,g,g,g,g,X + DEFB g,g,g,g,g,g,X,W,g,g,g,g,g,X + DEFB g,g,g,g,g,g,X,W,g,g,g,g,g,X + DEFB g,g,g,g,g,g,g,g,g,g,g,g,g,X + DEFB X,X,X,X,X,X,X,X,X,X,X,X,X,X + +;SPRITE 3 + DEFW 201 ;SIZE + DEFW 15 ;CX + DEFW 13 ;CY + DEFB G,G,G,G,G,G,G,G,G,X,X,X,G,G,G + DEFB G,G,G,G,G,G,G,G,X,G,G,G,X,G,X + DEFB G,G,G,G,G,G,G,G,G,G,G,G,G,X,X + DEFB G,X,X,X,G,G,G,G,G,G,G,G,X,X,X + DEFB X,Y,W,Y,X,X,X,X,X,X,X,G,G,G,G + DEFB X,W,Y,W,Y,W,Y,W,Y,W,X,G,G,G,G + DEFB X,Y,W,Y,W,Y,W,Y,W,Y,X,G,G,G,G + DEFB X,W,Y,W,Y,X,X,X,X,X,X,X,X,X,X + DEFB X,Y,W,Y,X,y,y,y,y,y,y,y,y,y,X + DEFB X,W,Y,X,y,y,y,y,y,y,y,y,y,X,G + DEFB X,Y,X,y,y,y,y,y,y,y,y,y,X,G,G + DEFB X,X,y,y,y,y,y,y,y,y,y,X,G,G,G + DEFB G,X,X,X,X,X,X,X,X,X,X,G,G,G,G + +;SPRITE 4 +; DEFW 132 ;SIZE +; DEFW 9 ;CX +; DEFW 14 ;CY +; DEFB G,G,X,G,G,G,X,G,G +; DEFB G,G,X,G,G,G,X,G,G +; DEFB G,G,X,G,G,G,X,G,G +; DEFB G,G,X,X,G,X,X,G,G +; DEFB G,G,G,X,G,X,G,G,G +; DEFB G,G,G,X,X,X,G,G,G +; DEFB G,G,G,G,X,G,G,G,G +; DEFB G,G,G,u,X,u,G,G,G +; DEFB G,G,G,u,G,u,u,u,G +; DEFB G,u,u,u,G,u,G,G,u +; DEFB u,G,G,u,G,u,G,G,u +; DEFB u,G,G,u,G,u,G,G,u +; DEFB u,G,G,u,G,G,u,u,G +; DEFB G,u,u,G,G,G,G,G,G + + DEFW 156 ;SIZE + DEFW 10 ;CX + DEFW 15 ;CY + DEFB G,G,g,G,G,G,g,G,G,G + DEFB G,G,g,W,G,G,g,W,G,G + DEFB G,G,g,W,G,G,g,W,G,G + DEFB G,G,g,g,G,g,g,W,G,G + DEFB G,G,G,g,W,g,W,W,G,G + DEFB G,G,G,g,g,g,W,G,G,G + DEFB G,G,G,G,g,W,W,G,G,G + DEFB G,G,G,g,g,g,G,G,G,G + DEFB G,G,G,g,W,g,g,g,G,G + DEFB G,g,g,g,W,g,W,W,g,G + DEFB g,G,W,g,W,g,W,G,g,W + DEFB g,W,G,g,W,g,W,G,g,W + DEFB g,W,G,g,W,G,g,g,G,W + DEFB G,g,g,G,W,G,G,W,W,G + DEFB G,G,W,W,G,G,G,G,G,G + +;SPRITE 5 +; DEFW 201 ;SIZE +; DEFW 15 ;CX +; DEFW 13 ;CY +; DEFB X,X,X,X,X,X,G,G,G,G,G,G,G,G,G +; DEFB X,W,W,W,W,X,X,G,G,G,G,G,G,G,G +; DEFB X,W,W,W,W,X,W,X,G,G,G,G,G,G,G +; DEFB X,W,X,X,W,X,u,u,u,u,u,u,G,G,G +; DEFB X,W,W,W,W,W,u,W,W,W,W,u,u,G,G +; DEFB X,W,X,X,X,X,u,W,W,W,W,u,W,u,G +; DEFB X,W,W,W,W,W,u,W,u,u,W,u,u,u,u +; DEFB X,W,X,X,X,X,u,W,W,W,W,W,W,W,u +; DEFB X,W,W,W,W,W,u,W,u,u,u,u,u,W,u +; DEFB X,X,X,X,X,X,u,W,W,W,W,W,W,W,u +; DEFB G,G,G,G,G,G,u,W,u,u,u,u,u,W,u +; DEFB G,G,G,G,G,G,u,W,W,W,W,W,W,W,u +; DEFB G,G,G,G,G,G,u,u,u,u,u,u,u,u,u + + DEFW 230 ;SIZE + DEFW 16 ;CX + DEFW 14 ;CY + DEFB g,g,g,g,g,g,G,G,G,G,G,G,G,G,G,G + DEFB g,W,W,W,W,g,g,G,G,G,G,G,G,G,G,G + DEFB g,W,G,G,G,g,W,g,G,G,G,G,G,G,G,G + DEFB g,W,g,g,G,g,g,g,g,g,g,g,G,G,G,G + DEFB g,W,G,W,W,G,g,W,W,W,W,g,g,G,G,G + DEFB g,W,g,g,g,g,g,W,G,G,G,g,W,g,G,G + DEFB g,W,G,W,W,W,g,W,g,g,G,g,g,g,g,G + DEFB g,W,g,g,g,g,g,W,G,W,W,G,W,W,g,W + DEFB g,W,G,W,W,W,g,W,g,g,g,g,g,G,g,W + DEFB g,g,g,g,g,g,g,W,G,W,W,W,W,W,g,W + DEFB G,W,W,W,W,W,g,W,g,g,g,g,g,G,g,W + DEFB G,G,G,G,G,G,g,W,G,W,W,W,W,W,g,W + DEFB G,G,G,G,G,G,g,g,g,g,g,g,g,g,g,W + DEFB G,G,G,G,G,G,G,W,W,W,W,W,W,W,W,W + +;SPRITE 6 + DEFW 214 ;SIZE + DEFW 16 ;CX + DEFW 13 ;CY + DEFB G,X,X,X,X,X,Y,Y,X,X,X,X,X,G,G,G + DEFB X,y,g,y,X,Y,X,X,Y,X,g,y,g,X,G,G + DEFB X,g,y,X,G,G,G,G,G,G,X,g,y,X,G,G + DEFB X,y,g,X,X,X,X,X,X,X,X,y,g,X,G,G + DEFB X,g,y,g,y,g,y,g,y,g,y,g,y,X,G,G + DEFB X,y,g,y,g,y,u,u,u,u,u,u,u,X,G,G + DEFB X,g,y,g,y,g,u,W,W,W,W,W,u,u,G,G + DEFB X,y,g,y,g,y,u,W,W,W,W,W,u,W,u,G + DEFB X,g,y,g,y,g,u,W,u,u,u,W,u,u,u,u + DEFB X,y,g,y,g,y,u,W,W,W,W,W,W,W,W,u + DEFB X,g,y,g,y,g,u,W,u,u,u,u,u,u,W,u + DEFB G,X,X,X,X,X,u,W,W,W,W,W,W,W,W,u + DEFB G,G,G,G,G,G,u,u,u,u,u,u,u,u,u,u + +;SPRITE 7 + DEFW 126 ;SIZE + DEFW 12 ;CX + DEFW 10 ;CY + DEFB G,G,G,G,X,X,X,X,G,G,G,G + DEFB G,G,X,X,G,G,G,G,X,X,G,G + DEFB G,X,G,G,G,G,G,G,G,G,X,G + DEFB X,G,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,G,X + DEFB G,X,G,G,G,G,G,G,G,G,X,G + DEFB G,G,X,X,G,G,G,G,X,X,G,G + DEFB G,G,G,G,X,X,X,X,G,G,G,G + +;SPRITE 8 + DEFW 105 ;SIZE + DEFW 11 ;CX + DEFW 9 ;CY + DEFB X,X,X,X,X,X,X,X,X,X,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G,X + DEFB X,X,X,X,X,X,X,X,X,X,X + +;SPRITE 9 + DEFW 86 ;SIZE + DEFW 10 ;CX + DEFW 8 ;CY + DEFB X,X,G,X,X,G,X,X,G,X + DEFB G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G + DEFB G,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,X + DEFB X,G,G,G,G,G,G,G,G,G + DEFB G,G,G,G,G,G,G,G,G,X + DEFB X,X,G,X,X,G,X,X,G,X + +;SPRITE 10 + DEFW 97 ;SIZE + DEFW 7 ;CX + DEFW 13 ;CY + DEFB G,G,G,G,G,X,G + DEFB G,G,G,G,X,Y,X + DEFB G,G,G,X,X,X,X + DEFB G,G,G,X,Y,X,G + DEFB G,G,X,Y,Y,X,G + DEFB G,G,X,Y,X,G,G + DEFB G,X,Y,Y,X,G,G + DEFB G,X,Y,X,G,G,G + DEFB X,X,Y,X,G,G,G + DEFB X,X,X,G,G,G,G + DEFB X,X,X,G,G,G,G + DEFB X,X,G,G,G,G,G + DEFB X,G,G,G,G,G,G + +;SPRITE 11 + DEFW 96 ;SIZE + DEFW 10 ;CX + DEFW 9 ;CY + DEFB X,X,G,G,G,G,G,G,G,G + DEFB G,X,X,G,G,G,G,G,G,G + DEFB G,G,X,X,G,G,G,G,G,G + DEFB G,G,G,X,X,G,G,G,G,G + DEFB G,G,G,G,X,X,G,G,G,G + DEFB G,G,G,G,G,X,X,G,G,G + DEFB G,G,G,G,G,G,X,X,G,G + DEFB G,G,G,G,G,G,G,X,X,G + DEFB G,G,G,G,G,G,G,G,X,X + + +;SPRITE 12 + DEFW 188 ;SIZE + DEFW 13 ;CX + DEFW 14 ;CY + DEFB G,G,G,G,X,X,X,G,G,G,G,G,G + DEFB G,G,X,X,G,G,G,X,X,G,G,G,G + DEFB G,X,g,W,W,W,G,G,g,X,G,G,G + DEFB G,X,W,W,G,G,G,G,G,X,G,G,G + DEFB X,G,W,G,G,G,G,G,G,G,X,G,G + DEFB X,G,W,G,G,G,G,G,G,G,X,G,G + DEFB X,G,G,G,G,G,G,G,G,G,X,G,G + DEFB G,X,G,G,G,G,G,G,W,X,G,G,G + DEFB G,X,g,G,G,G,G,W,g,X,g,G,G + DEFB G,G,X,X,G,G,W,g,u,u,u,G,G + DEFB G,G,G,G,X,X,X,u,G,u,u,u,G + DEFB G,G,G,G,G,G,G,G,u,G,u,u,u + DEFB G,G,G,G,G,G,G,G,G,u,G,u,u + DEFB G,G,G,G,G,G,G,G,G,G,u,u,G + +;SPRITE 13 + DEFW 48 ;SIZE + DEFW 7 ;CX + DEFW 6 ;CY + DEFB X,X,G,G,G,X,X + DEFB G,X,X,G,X,X,G + DEFB G,G,X,X,X,G,G + DEFB G,G,X,X,X,G,G + DEFB G,X,X,G,X,X,G + DEFB X,X,G,G,G,X,X + + + + diff --git a/SYS_EQU.ASM b/SYS_EQU.ASM new file mode 100644 index 0000000..367f5ad --- /dev/null +++ b/SYS_EQU.ASM @@ -0,0 +1,100 @@ + + +BUTTON EQU #80 +ED_BOX EQU #81 +STATIC EQU #82 +LISTX EQU #83 +VSBAR EQU #84 +HSBAR EQU #85 +CH_BOX EQU #86 +RD_BUTT EQU #87 +GROUP EQU #88 + +M_ITEM EQU #01 +M_GRAY EQU #02 +M_BAR EQU #04 +M_END EQU #80 + +PAGE0 EQU #82 +PAGE1 EQU #A2 +PAGE2 EQU #C2 +PAGE3 EQU #E2 +Y_PORT EQU #89 + +BLACK EQU #F0 +RED EQU #F1 +GREEN EQU #F2 +YELLOW EQU #F3 +BLUE EQU #F4 +MAGENTA EQU #F5 +CYAN EQU #F6 +DGRAY EQU #F7 +GRAY EQU #F8 +BRED EQU #F9 +BGREEN EQU #FA +BYELLOW EQU #FB +BBLUE EQU #FC +BMAGENT EQU #FD +BCYAN EQU #FE +WHITE EQU #FF + +INIT EQU #0100 +DLGinit EQU #0103 +GETPARM EQU #0106 +POPUP EQU #0109 +RECTAN EQU #010C +BPUSH EQU #010F +BPOP EQU #0112 +POINT EQU #0115 +HZ2LINE EQU #0118 +HRUBBER EQU #011B +VRUBBER EQU #011E +PLACE EQU #0121 +CHARS EQU #0124 +OPTIMIZ EQU #0127 +SAVERG EQU #012A +RESTRG EQU #012D +CONST EQU #0130 +DESTR EQU #0133 +LCONST EQU #0136 +LDESTR EQU #0139 +LOBJECT EQU #013C +WAITMSG EQU #013F +INTMOUS EQU #0142 +INTON EQU #0145 +INTOFF EQU #0148 + +LST_INI EQU #014B +LST_CLR EQU #014E +SBV_WRK EQU #0151 +EDITBOX EQU #0154 + +SBODY EQU #0157 +SBMAX EQU #015A +SBWIN EQU #015D +SBVAL EQU #0160 +POSSX EQU #0163 +POSSY EQU #0166 + +RSBMAX EQU #0169 +RSBWIN EQU #016C +RSBVAL EQU #016F +RPOSSX EQU #0172 +RPOSSY EQU #0175 +PCHARX EQU #0178 + +DLGopen EQU #017B +DLGclos EQU #017E + +XFRAME EQU #0181 + +HBAR EQU #0184 +SBH_WRK EQU #0187 +SBLEN EQU #018A +RSBLEN EQU #018D +SBHGT EQU #0190 +RSBHGT EQU #0193 +INITSPR EQU #0196 + + + diff --git a/TOOLS.ASM b/TOOLS.ASM new file mode 100644 index 0000000..3acca7d --- /dev/null +++ b/TOOLS.ASM @@ -0,0 +1,1508 @@ + +WORK_ LD A,(CRTOOL) + SUB #0A + JP Z,WINDS + DEC A + JP Z,ZOOMX + DEC A + JP Z,WORKA + DEC A + JP Z,LINES + DEC A + JP Z,SQUAR + DEC A + JP Z,ELIPS + DEC A + JP Z,FILLS + XOR A + RET + +ZOOMX CALL READCRD + RET NZ + LD A,(ZOOMMOD) + OR A + JP NZ,UNZOOM ;ZOOMX4 + LD BC,(SHIFTX) + ADD HL,BC + LD BC,33/2 + AND A + SBC HL,BC + JR NC,ZOOMX2 + LD HL,0 +ZOOMX2 LD (SHIFTX),HL + EX DE,HL + LD BC,(SHIFTY) + ADD HL,BC + LD BC,23/2 + AND A + SBC HL,BC + JR NC,ZOOMX3 + LD HL,0 +ZOOMX3 LD (SHIFTY),HL + EX DE,HL + JP ZOOM + +ZOOMX4 LD HL,(SHIFTX) + LD BC,33*8 + ADD HL,BC + EX DE,HL + LD HL,(X_SIZE) + SBC HL,DE + JR NC,ZOOMX5 + LD HL,(X_SIZE) + LD BC,33*8 + AND A + SBC HL,BC + JR NC,ZOOMX6 + LD HL,0 +ZOOMX6 LD (SHIFTX),HL +ZOOMX5 LD HL,(SHIFTY) + LD BC,23*8 + ADD HL,BC + EX DE,HL + LD HL,(Y_SIZE) + SBC HL,DE + JR NC,ZOOMX7 + LD HL,(Y_SIZE) + LD BC,23*8 + AND A + SBC HL,BC + JR NC,ZOOMX8 + LD HL,0 +ZOOMX8 LD (SHIFTY),HL +ZOOMX7 JP UNZOOM + +READCRD LD C,3 + CALL INTMOUS + CP 1 + LD A,1 + RET NZ + PUSH HL + PUSH DE + CALL LOBJECT + LD DE,#0401 + AND A + SBC HL,DE + POP DE + POP HL + LD A,0 + RET NZ + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + XOR A + RET + +PIXEL LD A,#00 + OR A + JP NZ,PIXEL2 +PIXEL1 PUSH DE + PUSH BC + CALL PUTPNT2 + POP BC + POP DE + RET + +PIXEL2 DEC A + JP NZ,PIXEL3 + PUSH DE + PUSH BC + CALL PUTPIX + POP BC + POP DE + RET + +PIXEL3 PUSH DE + PUSH BC + CALL GETPIX + CALL PUTPNT3 + POP BC + POP DE + RET + +REAL_XY LD BC,(SHIFTX) + ADD HL,BC + LD BC,(SHIFTY) + EX DE,HL + ADD HL,BC + EX DE,HL + RET + +HARD_XY LD BC,(X_) + ADD HL,BC + EX DE,HL + LD BC,(Y_) + ADD HL,BC + EX DE,HL + RET + +WRT_PIX PUSH HL + PUSH DE + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +WRTPIX1 LD A,D + OR E + JR Z,WRTPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR WRTPIX1 +WRTPIX2 EX DE,HL + ADD IX,DE + CALL C,PIXNEXT + LD A,(COLOR) + LD (IX),A + CALL RETBANK + POP DE + POP HL + RET + +RD_PIX PUSH HL + PUSH DE + CALL PIXOPEN + LD IX,AREAPIX + LD BC,(X_SIZE) +RDRPIX1 LD A,D + OR E + JR Z,RDRPIX2 + DEC DE + ADD IX,BC + CALL C,PIXNEXT + JR RDRPIX1 +RDRPIX2 EX DE,HL + ADD IX,DE + CALL C,PIXNEXT + LD D,(IX) + CALL RETBANK + LD A,D + POP DE + POP HL + RET + +WINDS LD C,3 + CALL INTMOUS + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + XOR A + LD (PREVX),HL + LD (PREV2X),HL + LD (PREVY),DE + LD (PREV2Y),DE + LD (STARX),HL + LD (STARY),DE + LD HL,(STARX) + LD DE,(PREV2X) + EXX + LD HL,(STARY) + LD DE,(PREV2Y) + EXX + CALL WINDSEL +WINDS2 CALL READCRD + JP NZ,WINDSS + LD A,(ZOOMMOD) + PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,WIND2 + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,WIND2 + POP HL + JP WINDS2 +WIND2 POP HL + LD (PREVX),HL + LD (PREVY),DE + CALL OUTWIND + JP WINDS2 + +WINDSS OR A + RET Z + LD HL,(STARX) + LD DE,(PREVX) + EXX + LD HL,(STARY) + LD DE,(PREVY) + EXX + CALL WINDSEL + XOR A + RET + + +OUTWIND + LD HL,(STARX) + LD DE,(PREV2X) + EXX + LD HL,(STARY) + LD DE,(PREV2Y) + EXX + CALL WINDSEL + LD HL,(STARX) + LD DE,(PREVX) + LD (PREV2X),DE + EXX + LD HL,(STARY) + LD DE,(PREVY) + LD (PREV2Y),DE + EXX + CALL WINDSEL + RET + +; HL - X1 HL'- Y1 +; DE - X2 DE'- Y2 + +WINDSEL AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,WS1 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +WS1 RET Z + LD (SQRLEN),HL + LD (SQR_X1),DE + EXX + AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,WS2 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +WS2 RET Z + LD (SQRHGT),HL + LD (SQR_Y1),DE + LD BC,(SQRHGT) + EXX + LD HL,(SQR_X1) + LD DE,(SQR_Y1) + CALL HARD_XY + LD BC,(SQRLEN) + JP XFRAME + +FILLS CALL READCRD + RET NZ + LD A,(ZOOMMOD) + OR A + JP Z,FUZZS + SRL H + RR L + SRL H + RR L + SRL H + RR L + SRL D + RR E + SRL D + RR E + SRL D + RR E +FUZZS CALL GETPIX + LD (XOLOR),A + LD C,A + LD A,(COLOR) + CP C + RET Z + CALL REAL_XY + CALL FILL + CALL REFRWIN +; LD HL,(SHIFTX) +; LD DE,(SHIFTY) +; LD BC,33 +; CALL DATAPIX + XOR A + RET + +FILL LD (BUFFER),DE + LD (BUFFER+2),HL + LD (TEMP_Y),DE + LD (TEMP_X),HL + LD BC,ENDBF ;END + PUSH BC + INC BC + INC BC + INC BC + INC BC + LD (CONMAX),BC + POP BC + LD (CONMIN),BC +MAIN_FF LD HL,(CONMIN) + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + DEC HL ;X-1 + CALL PLOT + LD HL,(CONMIN) + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + INC DE ;Y+1 + CALL PLOT + LD HL,(CONMIN) + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + INC HL ;X+1 + CALL PLOT + LD HL,(CONMIN) + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + DEC DE ;Y-1 + CALL PLOT + LD HL,(CONMIN) + INC HL + INC HL + INC HL + INC HL + PUSH HL + LD BC,LIMIT ;LIMIT!!! + AND A + SBC HL,BC + JR NZ,PASS + POP HL + LD HL,BUFFER + PUSH HL +PASS POP HL + LD (CONMIN),HL + LD BC,(CONMAX) + AND A + SBC HL,BC + RET Z + JP MAIN_FF + +PLOT LD (TEMP_Y),DE + LD (TEMP_X),HL + LD B,H + LD C,L + LD HL,(X_SIZE) + DEC HL + AND A + SBC HL,BC + RET C + LD HL,(Y_SIZE) + DEC HL + AND A + SBC HL,DE + RET C + LD H,B + LD L,C + CALL RD_PIX + LD C,A + LD A,(XOLOR) + CP C + RET NZ + CALL WRT_PIX + LD HL,(CONMAX) + LD DE,(TEMP_Y) + LD BC,(TEMP_X) + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),C + INC HL + LD (HL),B + INC HL + PUSH HL + LD BC,LIMIT + AND A + SBC HL,BC + JR NZ,PASS_1 + POP HL + LD HL,ENDBF ;END + PUSH HL +PASS_1 POP HL + LD (CONMAX),HL + RET + +XOLOR DB 0 +CONMIN DW 0 +CONMAX DW 0 +TEMP_Y DW 0 +TEMP_X DW 0 +ENDBF +BUFFER DW 0,0 + DS 1600 ;/4!!! 2000 +LIMIT + +SQRLEN DW 0 +SQR_X1 DW 0 +SQRHGT DW 0 +SQR_Y1 DW 0 + + +SQUAR LD C,3 + CALL INTMOUS + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + XOR A + LD (PREVX),HL + LD (PREVY),DE + LD (STARX),HL + LD (STARY),DE +SQUAR2 CALL READCRD + JP NZ,SQUARR + LD A,(ZOOMMOD) + PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,SQUR2 + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,SQUR2 + POP HL + JP SQUAR2 +SQUR2 POP HL + LD (PREVX),HL + LD (PREVY),DE + CALL OUTSQUR + JP SQUAR2 + +SQUARR OR A + RET Z + LD HL,(STARX) + LD DE,(PREVX) + EXX + LD HL,(STARY) + LD DE,(PREVY) + EXX + CALL SQUAR_3 + XOR A + RET + +OUTSQUR + LD HL,(STARX) + LD DE,(PREV2X) + EXX + LD HL,(STARY) + LD DE,(PREV2Y) + EXX + CALL SQUAR_1 + LD HL,(STARX) + LD DE,(PREVX) + LD (PREV2X),DE + EXX + LD HL,(STARY) + LD DE,(PREVY) + LD (PREV2Y),DE + EXX + CALL SQUAR_2 + RET + +SQUAR_1 LD A,2 + LD (PIXEL+1),A + JP SQUARD + +SQUAR_2 LD A,0 + LD (PIXEL+1),A + JP SQUARD + +SQUAR_3 LD A,1 + LD (PIXEL+1),A + JP SQUARD + +; HL - X1 HL'- Y1 +; DE - X2 DE'- Y2 + +SQUARD AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,SQ1 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +SQ1 RET Z + LD (SQRLEN),HL + LD (SQR_X1),DE + EXX + AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,SQ2 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +SQ2 RET Z + LD (SQRHGT),HL + LD (SQR_Y1),DE + EXX + LD HL,(SQR_X1) + LD DE,(SQR_Y1) + LD BC,(SQRLEN) +SQQ1 PUSH HL + CALL PIXEL + POP HL + INC HL + DEC BC + LD A,B + OR C + JP NZ,SQQ1 + LD BC,(SQRHGT) +SQQ2 PUSH HL + CALL PIXEL + POP HL + INC DE + DEC BC + LD A,B + OR C + JP NZ,SQQ2 + LD BC,(SQRLEN) +SQQ3 PUSH HL + CALL PIXEL + POP HL + DEC HL + DEC BC + LD A,B + OR C + JP NZ,SQQ3 + LD BC,(SQRHGT) +SQQ4 PUSH HL + CALL PIXEL + POP HL + DEC DE + DEC BC + LD A,B + OR C + JP NZ,SQQ4 + RET + + +LINES LD C,3 + CALL INTMOUS + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + XOR A + LD (PREVX),HL + LD (PREVY),DE + LD (STARX),HL + LD (STARY),DE +LINES2 CALL READCRD + JP NZ,ELINR + LD A,(ZOOMMOD) + PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,PLIN2 + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,PLIN2 + POP HL + JP LINES2 +PLIN2 POP HL + LD (PREVX),HL + LD (PREVY),DE + CALL OUTXLIN + JP LINES2 + +ELINR OR A + RET Z + LD HL,(STARX) + LD DE,(STARY) + LD H,E +; EXX + LD DE,(PREVX) + LD BC,(PREVY) + LD D,C + CALL LINEW + XOR A + RET + +OUTXLIN + LD HL,(STARX) + LD DE,(STARY) + LD H,E +; EXX + LD DE,(PREV2X) + LD BC,(PREV2Y) + LD D,C + CALL LINER + LD HL,(STARX) + LD DE,(STARY) + LD H,E +; EXX + LD DE,(PREVX) + LD BC,(PREVY) + LD (PREV2X),DE + LD (PREV2Y),BC + LD D,C + CALL LINE +; EXX + RET + + +LINEW PUSH HL + PUSH DE + PUSH BC + LD A,1 + LD (DOT+1),A + JP LINN + +LINER PUSH HL + PUSH DE + PUSH BC + LD A,2 + LD (DOT+1),A + JP LINN + +LINE PUSH HL ; line from p1(l,h) to p2(e,d) + PUSH DE + PUSH BC + XOR A + LD (DOT+1),A +LINN PUSH IX + LD B,#15 + LD C,#1D + LD A,E + SUB L + JR NC,M1LIN + NEG + EX DE,HL +M1LIN LD L,A + LD A,D + SUB H + JR NC,M2LIN + NEG + DEC B +M2LIN LD H,A + CP L + JR C,M3LIN + LD A,B + LD B,C + LD C,A + LD A,H + LD H,L + LD L,A +M3LIN LD A,B + LD (DEPENC),A + LD A,C + LD (INDEPC),A + PUSH DE + LD C,L + LD E,L + LD L,H + CALL DIVB + LD A,E + LD (SIMLIN+1),A + LD L,C + LD A,L + LD (LDLIN+1),A + LD A,D + LD (DECLIN+1),A + OR A + LD B,E + RR B + INC B + OR A + RR C + POP DE + INC L + JR L4LIN +SIMLIN LD B,#FF +L4LIN PUSH HL + CALL DOT + POP HL +INDEPC DEC D + DEC L + JR Z,RETLIN + LD A,C +DECLIN SUB #02 + LD C,A + JR C,LDLIN + DJNZ L4LIN +DEPENC DEC E + JR SIMLIN +LDLIN ADD A,#FF + LD C,A + JR L4LIN +RETLIN POP IX + POP BC + POP DE + POP HL + RET + +DOT LD A,#00 + OR A + JP NZ,DOT2 +DOT1 PUSH DE + PUSH BC + LD L,E + LD H,0 + LD E,D + LD D,0 + CALL PUTPNT2 + POP BC + POP DE + RET + +DOT2 DEC A + JP NZ,DOT3 + PUSH DE + PUSH BC + LD L,E + LD H,0 + LD E,D + LD D,0 + CALL PUTPIX + POP BC + POP DE + RET + +DOT3 PUSH DE + PUSH BC + LD L,E + LD H,0 + LD E,D + LD D,0 + CALL GETPIX + CALL PUTPNT3 + POP BC + POP DE + RET + + +DIVB LD D,0 ;E/L--E (MOD in D) +DIVB2 PUSH HL ;DE/L--E + PUSH BC + LD B,8 + EX DE,HL + LD D,E + LD E,0 +DIV1B OR A + RR D + RR E + SBC HL,DE + JR NC,MDIVB + ADD HL,DE +MDIVB RLA + DJNZ DIV1B + CPL + LD D,L + LD E,A + POP BC + POP HL + RET + +ELIPS LD C,3 + CALL INTMOUS + LD BC,(X_) + AND A + SBC HL,BC + EX DE,HL + LD BC,(Y_) + AND A + SBC HL,BC + EX DE,HL + XOR A + LD (PREVX),HL + LD (PREVY),DE + LD (STARX),HL + LD (STARY),DE +ELIPS2 CALL READCRD + JP NZ,ELIPR + LD A,(ZOOMMOD) + PUSH HL + LD BC,(PREVX) + AND A + SBC HL,BC + JP NZ,PELP2 + LD HL,(PREVY) + AND A + SBC HL,DE + JP NZ,PELP2 + POP HL + JP ELIPS2 +PELP2 POP HL + LD (PREVX),HL + LD (PREVY),DE + CALL OUTELIP + JP ELIPS2 + +ELIPR OR A + RET Z + LD HL,(STARX) + LD DE,(PREVX) + EXX + LD HL,(STARY) + LD DE,(PREVY) + EXX + CALL ELLIPS3 + XOR A + RET + +OUTELIP + LD HL,(STARX) + LD DE,(PREV2X) + EXX + LD HL,(STARY) + LD DE,(PREV2Y) + EXX + CALL ELLIPS1 + LD HL,(STARX) + LD DE,(PREVX) + LD (PREV2X),DE + EXX + LD HL,(STARY) + LD DE,(PREVY) + LD (PREV2Y),DE + EXX + CALL ELLIPS2 + RET + +ELLIPS1 LD A,2 + LD (PIXEL+1),A + JP ELLIPSE + +ELLIPS2 LD A,0 + LD (PIXEL+1),A + JP ELLIPSE + +ELLIPS3 LD A,1 + LD (PIXEL+1),A + JP ELLIPSE + +; HL - X1 HL'- Y1 +; DE - X2 DE'- Y2 + + +ELLIPSE AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,EL1 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +EL1 SRL H + RR L + LD A,H + OR L + RET Z + INC HL + LD (minor),HL + ADD HL,DE + LD (Xo),HL + EXX + AND A + LD B,H + LD C,L + SBC HL,DE + JR NC,EL2 + LD H,B + LD L,C + EX DE,HL + AND A + SBC HL,DE +EL2 SRL H + RR L + LD A,H + OR L + RET Z + INC HL + LD (major),HL + ADD HL,DE + LD (Yo),HL + EXX + JP START + +;+-------------------------------------------------------+ +;| MACHINE CODE ELLIPSE DRAWING ROUTINES (TURBO VERSION!)| +;+-------------------------------------------------------+ + +;(Xo),(Yo) = centre of ellipse +;(major),(minor) = the axes of the ellipse + + +;MULTIPLICATION ROUTINE : +; +;Multiplies BC by HL-DE +;giving 32 bit result in HL-IX + +mul32 + LD IX,0 + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + ADD IX,IX + ADC HL,HL + RL E + RL D + JP NC,$+9 + ADD IX,BC + JP NC,$+4 + INC HL + RET + +;WORKSPACE : +; +;Ellipse axes: + +minor DW 95 +major DW 95 + +;Ellipse centre: + +Xo DW 127 +Yo DW 96 + +;Current plot point: + +Xi DS 2 +Yi DS 2 + +;Work variables: + +a2 DS 4 +a2s DS 4 +b2 DS 4 +b2s DS 4 + +DELTAi DS 4 + + +START LD HL,#0000 + LD (Xi),HL + LD HL,(major) + LD (Yi),HL + +;Initialise work variables: + LD B,H ; a2=a*a + LD C,L + LD DE,#0000 + CALL mul32 + LD (a2),IX + LD (a2+2),HL + + LD (a2s),IX ; a2s=a2 + LD (a2s+2),HL + + LD HL,(minor) + LD B,H ; b2=b*b + LD C,L + LD DE,#0000 + CALL mul32 + LD (b2),IX + LD (b2s),HL + + LD HL,(Yi) ; b2s=b2*(2*Yi+1) + ADD HL,HL + INC HL + LD B,H + LD C,L + LD HL,(b2) + LD DE,(b2+2) + CALL mul32 + LD (b2s),IX + LD (b2s+2),HL + + LD HL,#0001 ;DELTAi=2*(1-b) + LD DE,(minor) + OR A + SBC HL,DE + ADD HL,HL + LD (DELTAi),HL + +;Sign extend to 32 bit (requires b>0) + LD HL,#FFFF + LD (DELTAi+2),HL + +;Main calculation loop: +MLOOOP + LD HL,(Yi) ;While Yi>0 + BIT 7,H + RET NZ + LD DE,(Xi) + +;HL already has (Yi) +; +;Plot four points of the ellipse (by symmetry) +; +;We actually plot (Xi,Yi),(-Xi,Yi),(-Xi,-Yi),(Xi,-Yi) + + PUSH DE + PUSH DE + PUSH HL + CALL SPOINT ; (Xi,Yi) + POP HL + POP DE + PUSH HL + LD A,D ;Negate Xi + CPL + LD D,A + LD A,E + CPL + LD E,A + INC DE + PUSH DE + CALL SPOINT ; (-Xi,Yi) + POP DE + POP HL + LD A,H ;Negate Yi + CPL + LD H,A + LD A,L + CPL + LD L,A + INC HL + PUSH HL + CALL SPOINT ; (-Xi,-Yi) + POP HL + POP DE + CALL SPOINT ; (Xi,-Yi) + + LD DE,(DELTAi) ; if DELTAi>0 + LD HL,(DELTAi+2) + CALL TSDEHL + JP Z,godiag + JP NC,gohoriz + + LD HL,(DELTAi) ;DELTAi=DELTAi+DELTAi+a2s + ADD HL,HL + EX DE,HL + LD HL,(DELTAi+2) + ADC HL,HL + EX DE,HL + LD BC,(a2s) + OR A + SBC HL,BC + EX DE,HL + LD BC,(a2s+2) + SBC HL,BC + CALL TSDEHL ;if DELTAi<=0 + JP Z,godiag + JP NC,godiag + CALL VERTIC + JP MLOOOP + +gohoriz + LD HL,(DELTAi) ;DELTAi=DELTAi+DELTAi+b2s + ADD HL,HL + EX DE,HL + LD HL,(DELTAi+2) + ADC HL,HL + EX DE,HL + LD BC,(b2s) + ADD HL,BC + EX DE,HL + LD BC,(b2s+2) + ADC HL,BC + CALL TSDEHL ;if DELTAi<=0 + JP Z,horiz + JP NC,horiz + +godiag + +;Make a diagonal step (go up ten along) + CALL VERTIC + +;Make a horizontal step +horiz + LD HL,(Xi) + INC HL + LD (Xi),HL + +;a2s=a2s+a2+a2 + LD HL,(a2s) + LD DE,(a2) + ADD HL,DE + LD (ceil1+1),HL + LD HL,(a2s+2) + LD DE,(a2+2) + ADC HL,DE + PUSH HL +ceil1 LD HL,0 + LD DE,(a2) + ADD HL,DE + LD (a2s),HL + POP HL + LD DE,(a2+2) + ADC HL,DE + LD (a2s+2),HL + +;DELTAi=DELTAi+a2s + PUSH HL + LD HL,(DELTAi) + LD DE,(a2s) + ADD HL,DE + LD (DELTAi),HL + LD HL,(DELTAi+2) + POP DE + ADC HL,DE + LD (DELTAi+2),HL + JP MLOOOP + +VERTIC + +;Make a vertical step + LD HL,(Yi) + DEC HL + LD (Yi),HL + +;b2s=b2s-b2-b2 + LD HL,(b2s) + LD DE,(b2) + OR A + SBC HL,DE + LD (ceil2+1),HL + LD HL,(b2s+2) + LD DE,(b2+2) + SBC HL,DE + PUSH HL +ceil2 LD HL,0 + LD DE,(b2) + OR A + SBC HL,DE + LD (b2s),HL + POP HL + LD DE,(b2+2) + SBC HL,DE + LD (b2s+2),HL + +;DELTAi=DELTAi-b2s + PUSH HL + LD HL,(DELTAi) + LD DE,(b2s) + OR A + SBC HL,DE + LD (DELTAi),HL + LD HL,(DELTAi+2) + POP DE + SBC HL,DE + LD (DELTAi+2),HL + RET + +;Test the 32-bit number in HL-DE for its sign +TSDEHL + OR A + BIT 7,H +;NC,NZ means les than zero + RET NZ + LD A,D + OR E + SCF +;C,NZ means greater than zero + RET NZ + LD A,H + OR L + SCF + RET + +;Plot routine: + +SPOINT LD BC,(Yo) + ADD HL,BC + EX DE,HL + LD BC,(Xo) + ADD HL,BC + CALL PIXEL + RET + + diff --git a/WINDOS2.ASM b/WINDOS2.ASM new file mode 100644 index 0000000..9e065f2 --- /dev/null +++ b/WINDOS2.ASM @@ -0,0 +1,570 @@ + +SDOS: + PUSH AF + PUSH BC + PUSH DE + PUSH HL + PUSH IX + PUSH IY + + LD C,3 + CALL INTMOUS + PUSH DE + PUSH HL + + CALL INTOFF + DI + LD A,(DOSPAGE) + OUT (PAGE0),A +; LD BC,#1FFD +; LD A,1 +; OUT (C),A + + POP HL + POP DE + LD C,4 + RST #30 + LD C,#83 + RST #30 + + POP IY + POP IX + POP HL + POP DE + POP BC + POP AF + RET + +RDOS: DI + PUSH AF + PUSH BC + PUSH DE + PUSH HL + PUSH IX + PUSH IY + + LD C,2 + RST #30 + LD C,3 + RST #30 + PUSH DE + PUSH HL + + LD A,WINPAGE + OUT (PAGE0),A + + POP HL + POP DE + LD C,4 + CALL INTMOUS + + LD C,1 + CALL INTMOUS + + CALL INTON +; LD BC,#1FFD +; LD A,0 +; OUT (C),A + +; POP HL +; POP DE +; LD C,4 +; CALL INTMOUS + + POP IY + POP IX + POP HL + POP DE + POP BC + POP AF + EI + RET + +REALN: DB "12345678.123",0 + +MFL: LD HL,DIRITEM + LD DE,REALN + LD BC,#0820 +RDF1: LD A,(HL) + LD (DE),A + CP C + JR Z,RDF2 + INC HL + INC DE + DJNZ RDF1 +RDF2: LD A,"." + LD (DE),A + INC DE + LD HL,EXTITEM + LD BC,#0320 +RDF3: LD A,(HL) + LD (DE),A + CP C + JR Z,RDF4 + INC HL + INC DE + DJNZ RDF3 +RDF4: XOR A + LD (DE),A + RET + + +SV_FILE: CALL MFL + CALL SDOS + IN A,(#E2) + PUSH AF + LD HL,REALN + CALL SAVERAM + +; LD A,#0D +; LD C,#F1 ;!!! +; RST #10 + + EX AF,AF' + CALL RDOS + POP AF + OUT (#E2),A + EX AF,AF' + RET + +SAVERAM: + XOR A + LD C,#0A ;CREATE FILE + RST #10 + RET C + LD (F_HANDLE),A + +; LD HL,0 +; LD IX,0 +; LD A,(F_HANDLE) +; LD BC,#0215 ;MOVE FILE POINTER TO END FILE +; RST #10 +; LD (SIZE1),HL +; LD (SIZE0),IX +; CALL MEM_CLK +; JR C,CSFIL + + CALL WRBLK +;CSFIL + LD A,(F_HANDLE) + LD C,#12 ;CLOSE FILE + RST #10 + RET + +WRBLK: +; LD HL,0 +; LD IX,0 +; LD A,(F_HANDLE) +; LD BC,#0015 ;MOVE FILE POINTER TO START FILE +; RST #10 + + LD A,#0D ;RAM DISK NUMBER + LD C,#CE ;GET RAM DISK'S ID + RST #08 + RET C + LD B,0 + LD C,#C4 ;GET PHISICAL PAGE NUMBER + RST #08 + RET C + + LD DE,(FHSIZE) + LD HL,(FLSIZE) +BWAGAIN: + AND A + LD BC,#4000 + SBC HL,BC + EX DE,HL + LD BC,#0000 + SBC HL,BC + EX DE,HL + JR C,ENDBLOKSAVE + PUSH DE + PUSH HL + CALL WR1 + POP HL + POP DE + JR NC,BWAGAIN + RET + +ENDBLOKSAVE: + LD BC,#4000 + ADD HL,BC + EX DE,HL + PUSH AF + OUT (PAGE3),A +;;;;;;;;;; + LD A,7 + OUT (#FE),A +;;;;;;;;;; + LD HL,#C000 +; LD DE,#4000 + LD C,#14 ;WRITE FILE + LD A,(F_HANDLE) + RST #10 + POP BC + RET C + RET + +WR1: +;BWAGAIN + PUSH AF + OUT (PAGE3),A + LD HL,#C000 + LD DE,#4000 + LD C,#14 ;WRITE FILE + LD A,(F_HANDLE) + RST #10 + POP BC + RET C + CP #FF + SCF + RET Z + LD A,B + LD C,#C7 ;GET NEXT PAGE + RST #08 + RET C + CP #FF + SCF + RET Z + AND A + RET + + +RD_FILE: CALL MFL + CALL SDOS + IN A,(#E2) + PUSH AF + + LD HL,REALN + CALL READRAM + +; LD A,#0D +; LD C,#F0 +; RST #10 + + + EX AF,AF' + CALL RDOS + POP AF + OUT (#E2),A + EX AF,AF' + RET + +F_HANDLE: DB 0 + +SIZE0: DW 0 +SIZE1: DW 0 + +READRAM: + XOR A + LD C,#11 ;OPEN FILE + RST #10 + RET C + LD (F_HANDLE),A + + LD HL,0 + LD IX,0 + LD A,(F_HANDLE) + LD BC,#0215 ;MOVE FILE POINTER TO END FILE + RST #10 + LD (SIZE1),HL + LD (SIZE0),IX + CALL MEM_CLK + JR C,CLFIL + + CALL RDBLK +CLFIL: + LD A,(F_HANDLE) + LD C,#12 ;CLOSE FILE + RST #10 + RET + + +MEM_CLK: LD HL,(SIZE1) + LD BC,(SIZE0) + LD DE,16384 + XOR A + SCF +KBT01: RR D + RR E + JR C,KBT02 + RR H + RR L + RR B + RR C + JR NC,KBT01 + LD A,1 + JR KBT01 +KBT02: OR A + JR Z,KBT03 + INC BC +KBT03: XOR A + CP B + SCF + RET NZ + LD B,C ;SIZE IN BLOCKS 16k + PUSH BC + LD A,#0D + LD C,#93 + RST #08 + POP BC + LD A,#0D + LD C,#92 + RST #08 + RET + +RDBLK: + LD HL,0 + LD IX,0 + LD A,(F_HANDLE) + LD BC,#0015 ;MOVE FILE POINTER TO START FILE + RST #10 + + LD A,#0D ;RAM DISK NUMBER + LD C,#CE ;GET RAM DISK'S ID + RST #08 + RET C + LD B,0 + LD C,#C4 ;GET PHISICAL PAGE NUMBER + RST #08 + RET C +BLAGAIN: PUSH AF + OUT (PAGE3),A + LD HL,#C000 + LD DE,#4000 + LD C,#13 ;READ FILE + LD A,(F_HANDLE) + RST #10 + POP BC + RET C + CP #FF + RET Z + LD A,B + LD C,#C7 ;GET NEXT PAGE + RST #08 + RET C + CP #FF + JR NZ,BLAGAIN + RET + +RD_DIR: + LD A,(DISK) + CALL CHDISK + LD HL,PATH + CALL CHDIR + CALL GET_DIR + RET + +GET_DIR: + CALL SDOS + IN A,(#E2) + PUSH AF + LD A,DIRPAGE + OUT (#E2),A + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),L + LDIR + + CALL READDIR + + PUSH AF + CALL RDOS + + CALL SORT + LD HL,PLACED + LD DE,#C000 + LD BC,#2000 + LDIR + POP AF + EX AF,AF' + POP AF + OUT (#E2),A + EX AF,AF' + RET + +DIRBUF: DS 44 + +PATH0: DB "*.*",0 + +READDIR: +; LD HL,PATH0 +; LD C,#1E ;CURDIR +; RST #10 + LD HL,PATH0 + LD DE,DIRBUF + LD A,#37 + LD BC,#0019 ;F_FIRST + RST #10 + LD DE,#C000 ;DIR + JR C,NO_DIR +F_NEXT_ENTRY: + LD A,(DIRBUF+32) ;ATTRIBUT +; BIT 4,A +; CALL Z,TOLOWER + LD HL,DIRBUF+33 ;NAME + LD BC,11 + LDIR + LD (DE),A + INC DE + LD HL,DIRBUF+12 ;OTHER INFORMATION + LD BC,20 + LDIR + PUSH DE + LD DE,DIRBUF + LD C,#1A ;F_NEXT + RST #10 + POP DE + JR NC,F_NEXT_ENTRY +NO_DIR: EX DE,HL + LD (HL),0 + RET + +CHDISK: + PUSH AF + CALL SDOS + POP AF + LD C,1 + RST #10 + PUSH AF + CALL RDOS + POP AF + RET + + +CHDIR: CALL SDOS + LD C,29 + RST #10 + PUSH AF + CALL RDOS + POP AF + RET NC + LD (#BF00),A + LD A,7 + OUT (#FE),A + LD IY,#5C3A + RET + +CH_DIR: LD DE,CHPATH + LD BC,11 + LDIR + EX DE,HL + LD B,11 + LD A,#20 +RUN002: DEC HL + CP (HL) + JR NZ,RUN003 + DJNZ RUN002 +RUN003: INC HL + LD (HL),'\' ; + INC HL + LD (HL),#00 + LD HL,CHPATH + CALL CHDIR + CALL GET_DIR + RET + +DISK: DB #02 + +CHPATH: DB "123456781230",0 + +PATH: DB 'C:' ; + ;DB 'C:\' ; ;!FIXIT + DS 255 + +DIRS: DEFW 0 +POSITER: DEFW 0 + +FILES: DEFW 0 + +SORT: LD IX,#C000 + LD HL,#E020 + LD (ENDSORT),HL + LD HL,0 + LD (FILES),HL +SORT_: LD A,(IX+0) + CP #E5 + JP Z,ADDERA + OR A + RET Z + CP "." + JP NZ,SORTC + LD A,(IX+1) + CP #20 + JP Z,ADDERA +SORTC: LD A,(IX+11) + LD E,A + AND #08 + JP NZ,ADDERA + LD A,E + AND #10 + JP NZ,ITDIREC + LD B,11 + LD D,XH + LD E,XL +SORT_00: LD A,(DE) + CP "A" + JP C,SORT_01 + CP "[" + JP NC,SORT_01 + ADD A,#20 +SORT_01: LD (DE),A + INC DE + DJNZ SORT_00 +ITDIREC: LD D,XH + LD E,XL + CALL SORTER + LD HL,(FILES) + INC HL + LD (FILES),HL +ADDERA: LD BC,#0020 + ADD IX,BC + JP SORT_ + +SORTER: LD HL,PLACED +SORTER0: LD A,(HL) + OR A + JP Z,SORTINS + PUSH DE + PUSH HL + LD B,11 +SORT1: LD A,(DE) ;(DE) < (HL) "C" + CP (HL) ;(DE) >= (HL) "NC" + JP NZ,SORT2 + INC DE + INC HL + DJNZ SORT1 +SORT2: POP HL + POP DE + JP C,SORTINS +SORT3: LD BC,#0020 + ADD HL,BC + JP SORTER0 +SORTINS: PUSH DE + PUSH HL + EX DE,HL + LD HL,(ENDSORT) + PUSH HL + AND A + SBC HL,DE + LD B,H + LD C,L + POP DE + LD HL,#0020 + ADD HL,DE + LD (ENDSORT),HL + JP Z,EMPPLC + EX DE,HL + DEC HL + DEC DE + LDDR +EMPPLC: POP DE + POP HL + LD BC,#0020 + LDIR + RET + +ENDSORT: DEFW #E020 + +PLACED: EQU #E000