]> git.sur5r.net Git - cc65/commitdiff
Straighten checking of the initialized flag in both, the C64 and C128
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Mar 2002 06:06:52 +0000 (06:06 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 25 Mar 2002 06:06:52 +0000 (06:06 +0000)
versions of rs232.s.
New include file common/rs232.inc, use the constants from this file instead
of defining them separately in each platform specific rs232 module.

git-svn-id: svn://svn.cc65.org/cc65/trunk@1208 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/atari/rs232.s
libsrc/c128/rs232.s
libsrc/c64/rs232.s
libsrc/common/rs232.inc [new file with mode: 0644]

index d312caab0c365e3447358da8ba1fd5c16f170eb1..67fa58a8487f48abb904ba36db404eeb3a4a447e 100644 (file)
@@ -29,6 +29,7 @@
 
        .include        "atari.inc"
        .include        "../common/errno.inc"
+        .include        "../common/rs232.inc"
 
        .rodata
 
@@ -130,17 +131,13 @@ cioerr:   jsr     fddecusage      ; decrement usage counter of fd as open failed
 ; using 8 bit word size. So only 8 bit is currently tested.
 ;
 
-; shouldn't this come from a "rs232.inc" ??
-ErrNotInitialized      = $01
-ErrNoData              = $04
-
 .proc  _rs232_params
 
        sta     tmp2
        lda     rshand
        cmp     #$ff
        bne     work            ; work only if initialized
-       lda     #ErrNotInitialized
+       lda     #RS_ERR_NOT_INITIALIZED
        bne     done
 work:  lda     rshand
        ldx     #0
@@ -241,7 +238,7 @@ done:       rts
        ldy     rshand
        cpy     #$ff
        bne     work            ; work only if initialized
-       lda     #ErrNotInitialized
+       lda     #RS_ERR_NOT_INITIALIZED
        bne     nierr
 
 work:  sta     ptr1
@@ -267,7 +264,7 @@ go: ; check whether there is any input available
        beq     nix_da          ; no input waiting...
 
        ; input is available: get it!
-       
+
        lda     #GETCHR         ; get raw bytes
        sta     ICCOM,x         ; in command code
        lda     #0
@@ -282,11 +279,11 @@ go:       ; check whether there is any input available
        sta     (ptr1,x)        ; return received byte
        txa
        rts
-       
+
 nierr: ldx     #0
        rts
 
-nix_da:        lda     #ErrNoData
+nix_da:        lda     #RS_ERR_NO_DATA
        ldx     #0
        rts
 
@@ -307,7 +304,7 @@ nix_da:     lda     #ErrNoData
        ldy     rshand
        cpy     #$ff
        bne     work            ; work only if initialized
-       lda     #ErrNotInitialized
+       lda     #RS_ERR_NOT_INITIALIZED
        bne     nierr
 
 work:  pha
index 0c5d7cf5cde3f1ba5175d8ec969762df822651c9..dd2695facfaef5ec525c0f90ef9fb0262d3a7f76 100644 (file)
        .importzp       ptr1, ptr2, tmp1, tmp2
        .import         popa, popax
        .export         _rs232_init, _rs232_params, _rs232_done, _rs232_get
-       .export         _rs232_put, _rs232_pause, _rs232_unpause, _rs232_status
+       .export         _rs232_put, _rs232_pause, _rs232_unpause, _rs232_status
 
        .include        "c128.inc"
+        .include        "../common/rs232.inc"
 
 
 NmiExit = $ff33     ;exit address for nmi
@@ -73,12 +74,6 @@ RegCommand           = 2     ; Command register
 RegControl             = 3     ; Control register
 RegClock               = 7     ; Turbo232 external baud-rate generator
 
-; Error codes. Beware: The codes must match the codes in the C header file
-ErrNotInitialized      = $01
-ErrBaudTooFast         = $02
-ErrBaudNotAvail        = $03
-ErrNoData              = $04
-ErrOverflow            = $05
 
 
 .code
@@ -170,11 +165,12 @@ _rs232_init:
        lda     #$06
        sta     BaudCode
 
-;** return
-       lda     #$ff
-       sta     Initialized
-       lda     #$00
-       tax
+; Done
+
+               ldx     #$ff
+       stx     Initialized
+       inx                             ; X = 0
+       txa                             ; A = 0
        rts
 
 ;----------------------------------------------------------------------------
@@ -197,9 +193,9 @@ _rs232_init:
 ;
 
 _rs232_params:
-               jsr     CheckInitialized        ;** check initialized
-               bcc     @L1
-       rts
+       bit     Initialized
+       bmi     @L1
+       jmp     NotInitialized          ; Return an error code
 
 ; Save new parity
 
@@ -221,8 +217,8 @@ _rs232_params:
        beq     @L3
        cpx     #4
        bcs     @L3
-@L2:   lda     #ErrBaudTooFast
-       bne     @L9
+@L2:   lda     #RS_ERR_BAUD_TOO_FAST
+       bne     @L9
 
 ; Set baud/parameters
 
@@ -235,16 +231,16 @@ _rs232_params:
        lda     HackBauds,x
 @L4:   cmp     #$ff
        bne     @L5
-       lda     #ErrBaudNotAvail
+       lda     #RS_ERR_BAUD_NOT_AVAIL
        bne     @L9
 
 @L5:   tax
        and     #$30
                beq     @L6
        bit     Turbo232
-       bmi     @L6
-       lda     #ErrBaudNotAvail
-       bne     @L9
+       bmi     @L6
+       lda     #RS_ERR_BAUD_NOT_AVAIL
+       bne     @L9
 
 @L6:   lda     tmp1
        and     #$0f
@@ -262,7 +258,7 @@ _rs232_params:
        beq     @L7
        lsr
        lsr
-       lsr
+       lsr
        lsr
        eor     #%00000011
        sta     ACIA+RegClock
@@ -322,7 +318,7 @@ _rs232_done:
 
 @L9:           lda     #$00
        sta     Initialized
-       tax
+       tax
        rts
 
 ;----------------------------------------------------------------------------
@@ -334,15 +330,14 @@ _rs232_done:
 ;
 
 _rs232_get:
-       jsr     CheckInitialized        ; Check if initialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Check for bytes to send
 
 @L1:   sta     ptr1
        stx     ptr1+1                  ; Store pointer to received char
-       ldx     SendFreeCnt
+       ldx     SendFreeCnt
        cpx     #$ff
        beq     @L2
        lda     #$00
@@ -353,7 +348,7 @@ _rs232_get:
 @L2:   lda     RecvFreeCnt
        cmp     #$ff
        bne     @L3
-       lda     #ErrNoData
+       lda     #RS_ERR_NO_DATA
        ldx     #0
        rts
 
@@ -362,7 +357,7 @@ _rs232_get:
 @L3:   ldx     Stopped
        beq     @L4
        cmp     #63
-       bcc     @L4
+       bcc     @L4
        lda     #$00
        sta     Stopped
        lda     RtsOff
@@ -374,12 +369,21 @@ _rs232_get:
 @L4:   ldx     RecvHead
                lda     RecvBuf,x
        inc     RecvHead
-       inc     RecvFreeCnt
+       inc     RecvFreeCnt
                ldx     #$00
        sta     (ptr1,x)
                txa                             ; Return code = 0
        rts
 
+;----------------------------------------------------------------------------
+;
+; RS232 module not initialized
+
+NotInitialized:
+       lda     #<RS_ERR_NOT_INITIALIZED
+       ldx     #>RS_ERR_NOT_INITIALIZED
+       rts
+
 ;----------------------------------------------------------------------------
 ;
 ; unsigned char __fastcall__ rs232_put (char B);
@@ -390,9 +394,8 @@ _rs232_get:
 ;
 
 _rs232_put:
-       jsr     CheckInitialized        ; Check initialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Try to send
 
@@ -402,14 +405,14 @@ _rs232_put:
        pha
        lda     #$00
        jsr     TryToSend
-       pla
+       pla
 
 ; Put byte into send buffer & send
 
 @L2:   ldx     SendFreeCnt
        bne     @L3
-       lda     #ErrOverflow
-       ldx     #$00
+       lda     #RS_ERR_OVERFLOW
+       ldx     #$00
        rts
 
 @L3:   ldx     SendTail
@@ -429,10 +432,8 @@ _rs232_put:
 ;
 
 _rs232_pause:
-; Check initialized
-       jsr     CheckInitialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Assert flow control
 
@@ -442,7 +443,7 @@ _rs232_pause:
 
 ; Delay for flow stop to be received
 
-       ldx     BaudCode
+       ldx     BaudCode
        lda     PauseTimes,x
        jsr     DelayMs
 
@@ -472,17 +473,15 @@ PauseTimes:
 ;
 
 _rs232_unpause:
-; Check initialized
-       jsr     CheckInitialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Re-enable rx interrupts & release flow control
 
 @L1:   lda     #$00
        sta     Stopped
        lda     RtsOff
-       ora     #%00001000
+       ora     #%00001000
        sta     ACIA+RegCommand
 
 ; Poll for stalled char & exit
@@ -500,17 +499,18 @@ _rs232_unpause:
 ;
 
 _rs232_status:
-       sta     ptr2
-       stx     ptr2+1
-       jsr     popax
-       sta     ptr1
-       stx     ptr1+1
-       jsr     CheckInitialized
-               bcs     @L9
+       sta     ptr2
+       stx     ptr2+1
+       jsr     popax
+       sta     ptr1
+       stx     ptr1+1
+       bit     Initialized
+       bmi     @L1
+       jmp     NotInitialized
 
 ; Get status
 
-       lda     ACIA+RegStatus
+@L1:   lda     ACIA+RegStatus
        ldy     #0
        sta     (ptr1),y
        jsr     PollReceive             ; bug-recovery hack
@@ -535,14 +535,14 @@ _rs232_status:
 ; Because of the C128 banking, the NMI handler must go into the non banked
 ; memory, since the ROM NMI entry point will switch to a configuration where
 ; only the lowest 16K of RAM are visible. We will place the NMI handler into
-; it's own segment and map this segment into the lower 16K in the linker 
+; it's own segment and map this segment into the lower 16K in the linker
 ; config.
-  
+
 .segment       "NMI"
 
 NmiHandler:
        lda     #CC65_MMU_CFG           ;(2)
-       sta     MMU_CR                  ;(4)
+       sta     MMU_CR                  ;(4)
                lda     ACIA+RegStatus          ;(4) ;status ;check for byte received
        and     #$08                    ;(2)
        beq     @L9                     ;(2*)
@@ -580,27 +580,9 @@ NmiHandler:
 @L4:           jmp     NmiExit
 
 @L9:   jmp     NmiContinue
-                    
 
-.code
 
-;----------------------------------------------------------------------------
-;
-; CheckInitialized  -  internal check if initialized
-; Set carry and an error code if not initialized, clear carry and do not
-; change any registers if initialized.
-;
-
-CheckInitialized:
-       bit     Initialized
-       bmi     @L1
-       lda     #ErrNotInitialized
-       ldx     #0
-       sec
-       rts
-
-@L1:   clc
-       rts
+.code
 
 ;----------------------------------------------------------------------------
 ; Try to send a byte. Internal routine. A = TryHard
index b2c8ecdf63187fb0c950ac517687d6ddae03c9f4..c47b359070d8b3c8e38a02a8c80e0409e8b232c6 100644 (file)
@@ -28,6 +28,7 @@
        .export         _rs232_put, _rs232_pause, _rs232_unpause, _rs232_status
 
        .include        "c64.inc"
+        .include        "../common/rs232.inc"
 
 
 NmiExit = $febc     ;exit address for nmi
@@ -73,12 +74,6 @@ RegCommand           = 2     ; Command register
 RegControl             = 3     ; Control register
 RegClock               = 7     ; Turbo232 external baud-rate generator
 
-; Error codes. Beware: The codes must match the codes in the C header file
-ErrNotInitialized      = $01
-ErrBaudTooFast         = $02
-ErrBaudNotAvail        = $03
-ErrNoData              = $04
-ErrOverflow            = $05
 
 
 .code
@@ -167,11 +162,12 @@ _rs232_init:
        lda     #$06
        sta     BaudCode
 
-;** return
-       lda     #$ff
-       sta     Initialized
-       lda     #$00
-       tax
+; Done
+
+               ldx     #$ff
+       stx     Initialized
+       inx                             ; X = 0
+       txa                             ; A = 0
        rts
 
 ;----------------------------------------------------------------------------
@@ -194,9 +190,9 @@ _rs232_init:
 ;
 
 _rs232_params:
-               jsr     CheckInitialized        ;** check initialized
-               bcc     @L1
-       rts
+       bit     Initialized
+       bmi     @L1
+       jmp     NotInitialized          ; Return an error code
 
 ; Save new parity
 
@@ -218,7 +214,7 @@ _rs232_params:
        beq     @L3
        cpx     #4
        bcs     @L3
-@L2:   lda     #ErrBaudTooFast
+@L2:   lda     #RS_ERR_BAUD_TOO_FAST
        bne     @L9
 
 ; Set baud/parameters
@@ -232,7 +228,7 @@ _rs232_params:
        lda     HackBauds,x
 @L4:   cmp     #$ff
        bne     @L5
-       lda     #ErrBaudNotAvail
+       lda     #RS_ERR_BAUD_NOT_AVAIL
        bne     @L9
 
 @L5:   tax
@@ -240,7 +236,7 @@ _rs232_params:
                beq     @L6
        bit     Turbo232
        bmi     @L6
-       lda     #ErrBaudNotAvail
+       lda     #RS_ERR_BAUD_NOT_AVAIL
        bne     @L9
 
 @L6:   lda     tmp1
@@ -331,13 +327,12 @@ _rs232_done:
 ;
 
 _rs232_get:
-       jsr     CheckInitialized        ; Check if initialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Check for bytes to send
 
-@L1:   sta     ptr1
+       sta     ptr1
        stx     ptr1+1                  ; Store pointer to received char
        ldx     SendFreeCnt
        cpx     #$ff
@@ -350,7 +345,7 @@ _rs232_get:
 @L2:   lda     RecvFreeCnt
        cmp     #$ff
        bne     @L3
-       lda     #ErrNoData
+       lda     #RS_ERR_NO_DATA
        ldx     #0
        rts
 
@@ -377,6 +372,15 @@ _rs232_get:
                txa                             ; Return code = 0
        rts
 
+;----------------------------------------------------------------------------
+;
+; RS232 module not initialized
+
+NotInitialized:
+       lda     #<RS_ERR_NOT_INITIALIZED
+       ldx     #>RS_ERR_NOT_INITIALIZED
+       rts
+
 ;----------------------------------------------------------------------------
 ;
 ; unsigned char __fastcall__ rs232_put (char B);
@@ -387,13 +391,12 @@ _rs232_get:
 ;
 
 _rs232_put:
-       jsr     CheckInitialized        ; Check initialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Try to send
 
-@L1:   ldx     SendFreeCnt
+        ldx    SendFreeCnt
        cpx     #$ff
        beq     @L2
        pha
@@ -405,7 +408,7 @@ _rs232_put:
 
 @L2:   ldx     SendFreeCnt
        bne     @L3
-       lda     #ErrOverflow
+       lda     #RS_ERR_OVERFLOW
        ldx     #$00
        rts
 
@@ -426,14 +429,12 @@ _rs232_put:
 ;
 
 _rs232_pause:
-; Check initialized
-       jsr     CheckInitialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Assert flow control
 
-@L1:   lda     RtsOff
+       lda     RtsOff
        sta     Stopped
        sta     ACIA+RegCommand
 
@@ -469,10 +470,8 @@ PauseTimes:
 ;
 
 _rs232_unpause:
-; Check initialized
-       jsr     CheckInitialized
-       bcc     @L1
-       rts
+       bit     Initialized
+       bpl     NotInitialized          ; Jump if not initialized
 
 ; Re-enable rx interrupts & release flow control
 
@@ -501,13 +500,14 @@ _rs232_status:
        stx     ptr2+1
        jsr     popax
        sta     ptr1
-       stx     ptr1+1
-       jsr     CheckInitialized
-               bcs     @L9
+       stx     ptr1+1
+       bit     Initialized
+       bmi     @L1
+       jmp     NotInitialized
 
 ; Get status
 
-       lda     ACIA+RegStatus
+@L1:   lda     ACIA+RegStatus
        ldy     #0
        sta     (ptr1),y
        jsr     PollReceive             ; bug-recovery hack
@@ -564,7 +564,7 @@ NmiHandler:
 
 ; Drop this char
 
-@L3:   inc     DropCnt+0               ;not time-critical
+@L3:   inc     DropCnt+0               ; not time-critical
        bne     @L4
        inc     DropCnt+1
        bne     @L4
@@ -574,25 +574,7 @@ NmiHandler:
 @L4:           jmp     NmiExit
 
 @L9:   pla
-       jmp NmiContinue
-
-;----------------------------------------------------------------------------
-;
-; CheckInitialized  -  internal check if initialized
-; Set carry and an error code if not initialized, clear carry and do not
-; change any registers if initialized.
-;
-
-CheckInitialized:
-       bit     Initialized
-       bmi     @L1
-       lda     #ErrNotInitialized
-       ldx     #0
-       sec
-       rts
-
-@L1:   clc
-       rts
+       jmp     NmiContinue
 
 ;----------------------------------------------------------------------------
 ; Try to send a byte. Internal routine. A = TryHard
diff --git a/libsrc/common/rs232.inc b/libsrc/common/rs232.inc
new file mode 100644 (file)
index 0000000..fa0089a
--- /dev/null
@@ -0,0 +1,21 @@
+;
+; rs232.inc
+;
+; (C) Copyright 2002 Ullrich von Bassewitz (uz@cc65.org)
+;
+
+; Assembler include file that makes the constants and structures from rs232.h
+; available for asm code.
+
+
+
+; Error codes returned by all functions
+RS_ERR_OK                              = $00   ; Not an error - relax
+RS_ERR_NOT_INITIALIZED                 = $01   ; Module not initialized
+RS_ERR_BAUD_TOO_FAST                   = $02   ; Cannot handle baud rate
+RS_ERR_BAUD_NOT_AVAIL                  = $03   ; Baud rate not available
+RS_ERR_NO_DATA                         = $04   ; Nothing to read
+RS_ERR_OVERFLOW                        = $05   ; No room in send buffer
+
+
+