# ip65 technical reference

# File : drivers/c64print.s

## functions

function | description
--- | ---
beep |
    currently does nothing (should make a 'beep noise')
    inputs: none
    outputs: none
cls |
    use C64 Kernel ROM function to clear the screen
    inputs: none
    outputs: none
print_a |
    use C64 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 C64 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

    .exportzp screen_current_row
    .exportzp screen_current_col

    screen_current_row=$d6
    screen_current_col=$d3

    ;use C64 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 C64 Kernel ROM function to move to a new line
    ;inputs: none
    ;outputs: none
    print_cr:
      lda #13
      jmp print_a

    ;use C64 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 #15
      sta $d418  ;set volume

      lda #0
      sta $d405
      lda #240
      sta $d406
      lda #8
      sta $d403

      ;tone values for voice 1
      lda #48
      sta $d400
      lda #28
      sta $d401

      ;enable tone register
      lda #65
      sta $d404

    ; pause for qtr second
      lda $dd06   ;
      sta beep_timer
      inc beep_timer  ;time counts backwards
    :
      lda $dd06   ;
      cmp beep_timer
      bne :-

      ;disable tone register
      lda #65
      sta $d404
      lda #0
      sta $d418  ;set volume

      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

    ;-- LICENSE FOR c64print.s --
    ; 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 --