# ip65 technical reference

# File : drivers/vic20print.s

## functions

function | description
--- | ---

beep

    currently does nothing (should make a 'beep noise')
    inputs: none
    outputs: none

cls

    use VIC 20 Kernel ROM function to clear the screen
    inputs: none
    outputs: none

print_a

    use VIC 20 Kernel ROM function to print a character to the screen
    inputs: A contains petscii value of character to print
    outputs: none

print_a_inverse

    print a single char in inverse text:

print_cr

    use VIC 20 Kernel ROM function to move to a new line
    inputs: none
    outputs: none

## constants

constants | description | value
--- | --- | ---
screen_current_col |  | $d3
screen_current_row |  | $d6

## implementation

    .export print_a
    .export print_cr
    .export cls
    .export beep
    .export print_a_inverse
    .import timer_read
    .exportzp screen_current_row
    .exportzp screen_current_col

    screen_current_row=$d6
    screen_current_col=$d3

    ;use VIC 20 Kernel ROM function to print a character to the screen
    ;inputs: A contains petscii value of character to print
    ;outputs: none
    print_a = $ffd2

    .bss
    beep_timer: .res 1

    .code

    ;use VIC 20 Kernel ROM function to move to a new line
    ;inputs: none
    ;outputs: none
    print_cr:
      lda #13
      jmp print_a

    ;use VIC 20 Kernel ROM function to clear the screen
    ;inputs: none
    ;outputs: none
    cls:
        lda #147  ; 'CLR/HOME'
        jmp print_a

    ;currently does nothing (should make a 'beep noise')
    ;inputs: none
    ;outputs: none
    beep:
      lda $900e
      ora #15
      sta $900e  ;set volume

      ;turn on osc. 3
      lda #$FF
      sta $900c

    ; pause for qtr second
      jsr timer_read
      stx beep_timer
      inc beep_timer
      inc beep_timer
    :
      jsr timer_read
      cpx beep_timer
      bne :-

      ;turn off osc. 3
      lda #$00
      sta $900c

      rts

    ;print a single char in inverse text:
    print_a_inverse:
      pha
      lda #18 ;inverse mode on
      jsr print_a
      pla
      jsr print_a
      lda #146 ;inverse mode off
      jmp print_a

    ; The contents of this file are subject to the Mozilla Public License
    ; Version 1.1 (the "License"); you may not use this file except in
    ; compliance with the License. You may obtain a copy of the License at
    ; http://www.mozilla.org/MPL/
    ;
    ; Software distributed under the License is distributed on an "AS IS"
    ; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
    ; License for the specific language governing rights and limitations
    ; under the License.
    ;
    ; The Original Code is ip65.
    ;
    ; The Initial Developer of the Original Code is Jonno Downes,
    ; jonno@jamtronix.com.
    ; Portions created by the Initial Developer are Copyright (C) 2009
    ; Jonno Downes. All Rights Reserved.
    ; -- LICENSE END --