;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-23 ; INCLUDE "dos_equ.asm" INCLUDE "SYS_EQU.ASM" EXE_HEADER: DB "EXE" ;EXE ID DB #00 ;EXE VERSION DW EXE_HEADER.Size ;CODE OFFSET LOW DW #0000 ;CODE OFFSET HIGH DW #0000 ;END-BEG ;PRIMARY LOADER DW #0000 ; DW #0000 ;RESERVED DW #0000 ; DW _DATA_ ;LOAD ADDRESS DW BEGIN ;START ADDRESS DW STACK_POINT ;STACK ADDRESS DB 0 .Size EQU $ - EXE_HEADER ;DS 490-1 _DATA_: BLOCK 128 STACK_POINT EQU $+1 WINPAGE: DB #FF DIRPAGE: DB #FF BEGIN: DI ;JP START_2DS ;JP IKEYBOARD START_2DS: ;LD (_SP+1),SP ;LD SP,#80F0 PUSH IX ; LD BC,1*256 + #3D ; getmem RST #10 JR NC,.ok_1 ; .exit: LD BC,#1E*256 + #41 ; Exit - недостаточно памяти RST #10 ; .ok_1: LD (WINPAGE),A LD BC,1*256 + #3D ; getmem RST #10 JR C,.exit LD (DIRPAGE),A ; 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) DI OUT (C),A LD HL,WN_FACE LD DE,0 LD BC,WN_FACE.Size LDIR ;POP BC ;LD A,B ;OUT (PAGE0),A CALL GO ; LD A,(WINPAGE) OUT (PAGE0),A LD C,#93 LD A,#0E RST 8 ;CLEAR LD BC,#0592 LD A,#0E RST 8 ;GET MEMORY LD BC,#0094 LD HL,PIXPAGE SLEPAGE: LD A,#0E PUSH HL PUSH BC RST 8 ;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 ; RST 8 LD HL,PALCOL ;SET DESKTOP PALETTE LD DE,#12EE ;& CURSOR COLORS LD BC,#FFA4 ;#EE,#EF XOR A RST 8 LD HL,PALCOL ;SET DESKTOP PALETTE LD DE,#12EE ;& CURSOR COLORS LD BC,#FFA4 ;#EE,#EF LD A,1 RST 8 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: DI LD A,(DOSPAGE) OUT (PAGE0),A 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 BC,#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 RST 8 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 RST 8 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 0 INCLUDE "interface/face.asm" ;INCLUDE "interface/face_alt.asm" ENT ENDMODULE WN_FACE.Size EQU $ - WN_FACE