]> git.sur5r.net Git - cc65/commitdiff
Atari: add support for BW-DOS. Initially contributed by Daniel Serpell.
authorChristian Groessler <chris@groessler.org>
Thu, 27 Sep 2018 15:37:59 +0000 (17:37 +0200)
committerChristian Groessler <chris@groessler.org>
Thu, 27 Sep 2018 15:37:59 +0000 (17:37 +0200)
asminc/atari.inc
include/atari.h
libsrc/atari/dosdetect.s
libsrc/atari/lseek.s
libsrc/atari/syschdir.s
libsrc/atari/system_check.s

index 4e2958fbc320a2f0debf910a3a01d51a21af28f2..98c721296c4473a537e0a79bd3b2f79eeca80fe0 100644 (file)
@@ -1033,10 +1033,11 @@ diopp_size   = 5        ; size of structure
 
 SPARTADOS    = 0
 REALDOS      = 1
-OSADOS       = 2        ; OS/A+
-XDOS         = 3
-ATARIDOS     = 4
-MYDOS        = 5
+BWDOS        = 2
+OSADOS       = 3        ; OS/A+
+XDOS         = 4
+ATARIDOS     = 5
+MYDOS        = 6
 NODOS        = 255
 ; The DOSes with dos_type below or equal MAX_DOS_WITH_CMDLINE do support
 ; command line arguments.
index d9463904cfddf5cecfc88ab199833bfb416594d6..ca6bd424ccd0afb15f41dca458fbe67257a3bd59 100644 (file)
@@ -261,11 +261,12 @@ extern void atrx15p2_tgi[];
 
 /* valid _dos_type values */
 #define SPARTADOS   0
-#define OSADOS      1
-#define XDOS        2
-#define REALDOS     3
-#define ATARIDOS    4
-#define MYDOS       5
+#define REALDOS     1
+#define BWDOS       2
+#define OSADOS      3
+#define XDOS        4
+#define ATARIDOS    5
+#define MYDOS       6
 #define NODOS       255
 
 /* Define hardware */
index 7e6088d973c8cf04818076e245bc0dd87c45a306..1dd6a87f5a13cd82bcf8b4fc591d3ac7117f4c65 100644 (file)
@@ -35,9 +35,20 @@ detect: lda     DOS
         cmp     (DOSVEC),y
         beq     done
         lda     #OSADOS
+        bne     set
+
+spdos:  lda     DOS+3           ; 'B' in BW-DOS
+        cmp     #'B'
+        bne     spdos_real
+        lda     DOS+4           ; 'W' in BW-DOS
+        cmp     #'W'
+        bne     spdos_real
+
+        lda     #BWDOS
         .byte   $2C             ; BIT <abs>
 
-spdos:  lda     #SPARTADOS
+spdos_real:
+        lda     #SPARTADOS
         .byte   $2C             ; BIT <abs>
 
 mydos:  lda     #MYDOS
@@ -47,7 +58,7 @@ rdos:   lda     #REALDOS
         .byte   $2C             ; BIT <abs>
 
 xdos:   lda     #XDOS
-        sta     __dos_type
+set:    sta     __dos_type
 done:   rts
 
 ; ------------------------------------------------------------------------
index 462f2f90b746f50662d4a84d5abb4583790d93b7..b6a7663617541f4fdbe5dd3e1db782983d10d96b 100644 (file)
@@ -195,6 +195,8 @@ chk_supp:
         lda     __dos_type
         cmp     #SPARTADOS
         beq     :+
+        cmp     #BWDOS
+        beq     :+
         cmp     #REALDOS
         bne     ns1
 :       txa
index 9e4c33a1967b669d7c262ad0826d299faf99391a..f493fea54dd5094461271e5a36aca8b2a05063b3 100644 (file)
@@ -67,6 +67,8 @@ ucok1:
         beq     :+
         cmp     #REALDOS
         beq     :+
+        cmp     #BWDOS
+        beq     :+
         lda     #CHDIR_MYDOS
         .byte   $2C             ; BIT <abs>
 :       lda     #CHDIR_SPDOS
index ec0d60513ce339a4b3796f0de314742917cd6545..19efaf2e28ee8ea1c9f0d09ad4631bcb56f2fdff 100644 (file)
@@ -77,7 +77,16 @@ cont:   ldx     #0              ; channel 0
 sdcheck:lda     DOS
         cmp     #'S'
         bne     sdcrts0         ; not SpartaDOS, assume RAM is not used
-        lda     DOS+1           ; SD version
+
+; check for BW-DOS, which always reports itself as SpartaDOS, but doesn't use memory under the ROM
+        lda     DOS+3           ; 'B' in BW-DOS
+        cmp     #'B'
+        bne     sdnobw
+        lda     DOS+4           ; 'W' in BW-DOS
+        cmp     #'W'
+        beq     sdcrts0         ; BW-DOS does not use RAM below ROM
+
+sdnobw: lda     DOS+1           ; SD version
         cmp     #$40            ; SD-X has $40 or higher
         bcc     sdcrts1         ; older versions (except maybe 1.x) always use the RAM under the ROM
         ldy     #31             ; offset for OSRMFLG