/*******************************
 * 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