From 8e95d036e35d8b0249a8ad5360e4d732cda122cc Mon Sep 17 00:00:00 2001 From: cuz Date: Sat, 26 Feb 2005 09:34:01 +0000 Subject: [PATCH] Move constructor code into the INIT segment git-svn-id: svn://svn.cc65.org/cc65/trunk@3406 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/apple2/cputc.s | 84 ++++++++++++++++++++------------------ libsrc/apple2/dosdetect.s | 4 +- libsrc/apple2/get_ostype.s | 13 +++++- libsrc/apple2/mainargs.s | 13 ++++-- 4 files changed, 69 insertions(+), 45 deletions(-) diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index 76ca7769c..a09dadd32 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -14,60 +14,66 @@ .include "apple2.inc" +; ------------------------------------------------------------------------ +; Initialization + +.segment "INIT" + initconio: lda #$FF ; Normal character display mode sta INVFLG lda #$00 - jsr SETWND ; Reset text window to full screen - rts + jmp SETWND ; Reset text window to full screen +; ------------------------------------------------------------------------ ; Plot a character - also used as internal function +.code + _cputcxy: - pha ; Save C - jsr popa ; Get Y - jsr _gotoxy - pla ; Restore C + pha ; Save C + jsr popa ; Get Y + jsr _gotoxy + pla ; Restore C _cputc: - cmp #$0D ; Test for \r = carrage return - beq left - cmp #$0A ; Test for \n = line feed - beq newline - ora #$80 ; Turn on high bit - cmp #$E0 ; Test for lowercase - bcc cputdirect - and #$DF ; Convert to uppercase + cmp #$0D ; Test for \r = carrage return + beq left + cmp #$0A ; Test for \n = line feed + beq newline + ora #$80 ; Turn on high bit + cmp #$E0 ; Test for lowercase + bcc cputdirect + and #$DF ; Convert to uppercase cputdirect: - jsr putchar - inc CH ; Bump to next column - lda CH - cmp #40 - bne done + jsr putchar + inc CH ; Bump to next column + lda CH + cmp #40 + bne done left: lda #$00 ; Goto left edge of screen - sta CH + sta CH done: rts newline: - inc CV - lda CV - cmp #24 - bne :+ - lda #$00 - sta CV -: jsr BASCALC - rts - -putchar: - and INVFLG ; Apply normal, inverse, flash - ldy CH - sta (BASL),Y - rts + inc CV + lda CV + cmp #24 + bne :+ + lda #$00 + sta CV +: jmp BASCALC + +putchar: + and INVFLG ; Apply normal, inverse, flash + ldy CH + sta (BASL),Y + rts _gotoxy: - sta CV ; Store Y - jsr BASCALC - jsr popa ; Get X - sta CH ; Store X - rts + sta CV ; Store Y + jsr BASCALC + jsr popa ; Get X + sta CH ; Store X + rts diff --git a/libsrc/apple2/dosdetect.s b/libsrc/apple2/dosdetect.s index 9b3731ac5..248ea61a0 100644 --- a/libsrc/apple2/dosdetect.s +++ b/libsrc/apple2/dosdetect.s @@ -29,6 +29,8 @@ ; - "Apple II ProDOS 8 TechNote #023: ProDOS 8 Changes and Minutia" ; - ProDOS TechRefMan, chapter 5.2.4 +.segment "INIT" + initdostype: lda MLI cmp #$4C ; Is MLI present? (JMP opcode) @@ -40,6 +42,6 @@ initdostype: : sta __dos_type done: rts - .bss +.bss __dos_type: .res 1 diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index 9523d8b5e..ba2347ab5 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -10,6 +10,11 @@ ; Identify machine according to: ; "Apple II Miscellaneous TechNote #7: Apple II Family Identification" +; ------------------------------------------------------------------------ +; Initialization + +.segment "INIT" + initostype: sec jsr $FE1F @@ -30,13 +35,17 @@ next: inx bne :- beq next ; Branch always +; ------------------------------------------------------------------------ + +.code + _get_ostype: lda ostype ldx #$00 rts - .rodata +.rodata index: .byte $B3, $00 ; Apple ][ .byte $B3, $1E, $00 ; Apple ][+ @@ -65,6 +74,6 @@ value: .byte $38, $10 ; Apple ][ .byte $00 - .bss +.bss ostype: .res 1 diff --git a/libsrc/apple2/mainargs.s b/libsrc/apple2/mainargs.s index 4f88aeb3a..004a1629f 100644 --- a/libsrc/apple2/mainargs.s +++ b/libsrc/apple2/mainargs.s @@ -35,13 +35,20 @@ BASIC_BUF_LEN = 239 FNAM_LEN = $280 FNAM = $281 - .assert MAXARGS <= (BASIC_BUF_LEN - 2)/2, error, "Too many arguments" MAXARGS = 10 ; Maximum number of arguments allowed REM = $B2 ; BASIC token-code NAME_LEN = 15 ; maximum length of command-name + +; Validate sizes +.if MAXARGS > (BASIC_BUF_LEN - 2)/2 +.error "Too many arguments" +.endif + +; Get possible command-line arguments. Goes into the special INIT segment, +; which may be reused after the startup code is run + +.segment "INIT" -; Get possible command-line arguments. -; initmainargs: ; Assume that the program was loaded, a moment ago, by the traditional LOAD -- 2.39.5