/*******************************
* MAYA-GRAB ASM for v0.1.7+
* Assembler routines by:
* Vladimir Ignjatijevic
* (C) 2016 GARAGE APPS
*******************************/
// include basic upstart
.pc = $0801 "BASIC"
:BasicUpstart($c000)
// code start address
.pc = $c000 "Maya Grab"
// zeropage pointers
.const screen = $fb
.const param1 = $fd
.const param2 = $fe
// constants
.const CHAR_FRAME = 160
.const CHAR_CLEAR = 32
.const FRAME_COLOR = 2
.const FRAME_WIDTH = 27
.const FRAME_HEIGHT = 18
/*******************************
* Draw Frame
*******************************/
DrawFrame:
ldx #00
!loop_x:
lda #CHAR_FRAME
sta $0400,x
sta $0400+FRAME_HEIGHT*40,x
lda #FRAME_COLOR
sta $D800,x
sta $D800+FRAME_HEIGHT*40,x
inx
cpx #FRAME_WIDTH
bne !loop_x-
lda #$04
sta screen+1
lda #$28
sta screen
lda #$D8
sta param2
lda #$28
sta param1
ldx #00
!loop_y:
pha
lda #CHAR_FRAME
ldy #00
sta (screen),y
ldy #FRAME_WIDTH-1
sta (screen),y
lda #FRAME_COLOR
ldy #00
sta (param1),y
ldy #FRAME_WIDTH-1
sta (param1),y
pla
clc
adc #40
bcc !no_carry+
inc screen+1
inc param2
!no_carry:
sta screen
sta param1
inx
cpx #FRAME_HEIGHT-1
bne !loop_y-
rts
/*******************************
* Clear Screen Parts
*******************************/
ClearRoom:
lda #25
sta param1
lda #17
sta param2
lda #$04
sta screen+1
lda #$29
sta screen
jsr ClearScreenPart
rts
ClearInputMessage:
lda #40
sta param1
lda #02
sta param2
lda #$07
sta screen+1
lda #$20
sta screen
jsr ClearScreenPart
rts
ClearItemsDirections:
lda #12
sta param1
lda #18
sta param2
lda #$04
sta screen+1
lda #$44
sta screen
jsr ClearScreenPart
rts
/*******************************
* Clear Screen Part
* in: screen = pointer start
* param1 = width
* param2 = height
*******************************/
ClearScreenPart:
ldx #00
!loop_y:
ldy #00
pha
!loop_x:
lda #CHAR_CLEAR
sta (screen),y
iny
cpy param1
bne !loop_x-
pla
inx
cpx param2
beq !clear_done+
clc
adc #40
bcc !no_carry+
inc screen+1
!no_carry:
sta screen
jmp !loop_y-
!clear_done:
rts