2D-Studio/2DSTUDIO.ASM
2025-07-11 01:54:35 +10:00

2106 lines
28 KiB
NASM

;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