From 145a010e59030cf6436b0db7edf2dfddb3815f8a Mon Sep 17 00:00:00 2001 From: Greg King Date: Fri, 22 Aug 2014 17:19:58 -0400 Subject: [PATCH] Moved the CAPS LOCK code out of the startup file, and into its own file. --- libsrc/atmos/capslock.s | 47 +++++++++++++++++++++++++++++++++++++++++ libsrc/atmos/cgetc.s | 4 +++- libsrc/atmos/crt0.s | 28 ++++++------------------ libsrc/atmos/read.s | 3 ++- 4 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 libsrc/atmos/capslock.s diff --git a/libsrc/atmos/capslock.s b/libsrc/atmos/capslock.s new file mode 100644 index 000000000..6811862c6 --- /dev/null +++ b/libsrc/atmos/capslock.s @@ -0,0 +1,47 @@ +; +; When Oric computers are in BASIC's command mode, the keyboard is in CAPS lock +; mode (because Oric BASIC keywords must be typed in upper-case). This +; constructor disables that mode, so that text will be typed as lower-case +; (which is the default on other cc65 platforms). +; This module is linked by the conio and POSIX input functions. +; +; 2014-08-22, Greg King +; + + .destructor restore_caps + .constructor disable_caps + + .include "atmos.inc" + + +;-------------------------------------------------------------------------- + +; Restore the old capitals-lock state. + +restore_caps: + lda capsave + sta CAPSLOCK + rts + + +;-------------------------------------------------------------------------- +; Put this constructor into a segment that can be re-used by programs. +; +.segment "INIT" + +; Turn the capitals lock off. + +disable_caps: + lda CAPSLOCK + sta capsave + lda #$7F + sta CAPSLOCK + rts + + +;-------------------------------------------------------------------------- + +.bss + +capsave: + .res 1 diff --git a/libsrc/atmos/cgetc.s b/libsrc/atmos/cgetc.s index 0c6fb4c7a..dab92f882 100644 --- a/libsrc/atmos/cgetc.s +++ b/libsrc/atmos/cgetc.s @@ -1,13 +1,15 @@ ; ; 2003-04-13, Ullrich von Bassewitz -; 2014-08-21, Greg King +; 2014-08-22, Greg King ; ; char cgetc (void); ; .export _cgetc .constructor initcgetc + .import cursor + .forceimport disable_caps .include "atmos.inc" diff --git a/libsrc/atmos/crt0.s b/libsrc/atmos/crt0.s index 2c7e9dc41..1d919f348 100644 --- a/libsrc/atmos/crt0.s +++ b/libsrc/atmos/crt0.s @@ -2,7 +2,7 @@ ; Startup code for cc65 (Oric version) ; ; By Debrune Jérôme and Ullrich von Bassewitz -; 2014-08-15, Greg King +; 2014-08-22, Greg King ; .export _exit @@ -40,7 +40,7 @@ .segment "STARTUP" -; Save the zero-page area we're about to use. +; Save the zero-page area that we're about to use. ldx #zpspace-1 L1: lda sp,x @@ -52,13 +52,6 @@ L1: lda sp,x jsr zerobss -; Turn capitals lock off. - - lda CAPSLOCK - sta capsave - lda #$7F - sta CAPSLOCK - ; Unprotect screen columns 0 and 1. lda STATUS @@ -66,7 +59,7 @@ L1: lda sp,x and #%11011111 sta STATUS -; Save system stuff; and, set up the stack. +; Save some system stuff; and, set up the stack. tsx stx spsave ; Save system stk ptr @@ -76,30 +69,25 @@ L1: lda sp,x lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__) sta sp+1 ; Set argument stack ptr -; Call module constructors. +; Call the module constructors. jsr initlib -; Push arguments; and, call main(). +; Push the command-line arguments; and, call main(). jsr callmain -; Call module destructors. This is also the exit() entry. +; Call the module destructors. This is also the exit() entry. _exit: jsr donelib ; Run module destructors -; Restore system stuff. +; Restore the system stuff. ldx spsave txs lda stsave sta STATUS -; Restore capitals lock. - - lda capsave - sta CAPSLOCK - ; Copy back the zero-page stuff. ldx #zpspace-1 @@ -124,5 +112,3 @@ zpsave: .res zpspace spsave: .res 1 stsave: .res 1 -capsave: - .res 1 diff --git a/libsrc/atmos/read.s b/libsrc/atmos/read.s index 443808fa8..324ac789e 100644 --- a/libsrc/atmos/read.s +++ b/libsrc/atmos/read.s @@ -1,5 +1,5 @@ ; -; 2013-12-24, Greg King +; 2014-08-22, Greg King ; ; int read (int fd, void* buf, unsigned count); ; @@ -11,6 +11,7 @@ .import popax .importzp ptr1, ptr2, ptr3 + .forceimport disable_caps .macpack generic .include "atmos.inc"