;
; 2003-04-13, Ullrich von Bassewitz
-; 2013-07-26, Greg King
+; 2014-08-21, Greg King
;
; char cgetc (void);
;
; No character, enable cursor and wait
- lda cursor ; Cursor currently off?
+ lda cursor ; Should cursor be off?
beq @L1 ; Skip if so
- lda STATUS
- ora #%00000001 ; Cursor ON
- sta STATUS
+ lsr STATUS
+ sec ; Cursor ON
+ rol STATUS
@L1: lda KEYBUF
bpl @L1
ldx cursor
beq @L2
- ldx #$00 ; Zero high byte
dec STATUS ; Clear bit zero
; We have the character, clear avail flag
@L2: and #$7F ; Mask out avail flag
sta KEYBUF
+ ldx #>0
ldy MODEKEY
cpy #FUNCTKEY
bne @L3
.endproc
; ------------------------------------------------------------------------
-; Switch the cursor off, disable capslock. Code goes into the INIT segment
+; Switch the cursor off. Code goes into the INIT segment
; which may be reused after it is run.
.segment "INIT"
initcgetc:
- lda STATUS
- and #%11111110
- sta STATUS
- lda #$7F
- sta CAPSLOCK
+ lsr STATUS
+ asl STATUS ; Clear bit zero
rts
-
; Startup code for cc65 (Oric version)
;
; By Debrune Jérôme <jede@oric.org> and Ullrich von Bassewitz <uz@cc65.org>
+; 2014-08-15, Greg King
;
.export _exit
.segment "STARTUP"
-; Save the zero page area we're about to use
+; Save the zero-page area we're about to use.
ldx #zpspace-1
L1: lda sp,x
- sta zpsave,x ; Save the zero page locations we need
+ sta zpsave,x
dex
bpl L1
-; Clear the BSS data
+; Clear the BSS data.
jsr zerobss
-; Unprotect columns 0 and 1
+; Turn capitals lock off.
+
+ lda CAPSLOCK
+ sta capsave
+ lda #$7F
+ sta CAPSLOCK
+
+; Unprotect screen columns 0 and 1.
lda STATUS
sta stsave
and #%11011111
sta STATUS
-; Save system stuff and setup the stack
+; Save system stuff; and, set up the stack.
tsx
stx spsave ; Save system stk ptr
lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
sta sp+1 ; Set argument stack ptr
-; Call module constructors
+; Call module constructors.
jsr initlib
-; Push arguments and call main()
+; Push arguments; and, call main().
jsr callmain
-; Call module destructors. This is also the _exit entry.
+; Call module destructors. This is also the exit() entry.
_exit: jsr donelib ; Run module destructors
-; Restore system stuff
+; Restore system stuff.
ldx spsave
txs
lda stsave
sta STATUS
-; Copy back the zero page stuff
+; Restore capitals lock.
+
+ lda capsave
+ sta CAPSLOCK
+
+; Copy back the zero-page stuff.
ldx #zpspace-1
L2: lda zpsave,x
dex
bpl L2
-; Back to BASIC
+; Back to BASIC.
rts
spsave: .res 1
stsave: .res 1
+capsave:
+ .res 1