2D-Studio/2DS_DISK.ASM
2025-07-11 00:23:19 +10:00

1431 lines
18 KiB
NASM

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"