;---------------------------------------------------------
!to "detectcbm.prg",cbm
; Basicstart
*= $0400
!byte $00,$0c,$08,$0a,$00,$9e,$31,$30,$33,$39,$00,$00,$00,$00
; main
*=$040f
;--------------------------------------------------
chrout = $ffd2 ; print a char on screen
;--------------------------------------------------
bas1 = $e180 ; "***" in power on message (Basic 1)
bas2 = $e1c4 ; "###" in power on message (Basic 2)
;--------------------------------------------------
menu:
lda #$93 ; clear screen
jsr chrout
lda #$0e ; set charmode
sta $e84c
jsr detect ; resistance is futile .. We will add your
rts ; technological distinctiveness to our own ;)
;--------------------------------------------------
; Try to detect Basic
;--------------------------------------------------
detect:
ldx #00
- lda $dea4,x ; Basic 4 detect
cmp basic4,x ; test for "*** Commodore Basic 4.0 ***"
bne +
inx
cpx #27
bne -
jsr bas4found
rts
+ ldx #$00 ; Basic 1 detect
- lda bas1,x ; test for "***" in $e180 : "*** Commodore Basic ***"
cmp #$2a
bne +
inx
cpx #2
bne -
rts
+ ldx #$00 ; Basic 2 detect
- lda bas2,x ; test for "###" in $e1c4 : "### Commodore Basic ###"
cmp #$23
beq bas2found
bne +
inx
cpx #2
bne -
jsr bas2found
jmp menu
+ ldy #$00
- lda unkroms,y ; point text
sta $8000,y ; drop some text on the screen
iny
cpy #39
bne -
rts
;--------------------------------------------------
; Check for memory
;--------------------------------------------------
bas1found: lda #'1'
sta pettext+6 ; insert "1" in text
lda 133 ; old pet mem test
checkmem cmp #32 ; check for 8K
bne +
lda #'8'
sta pettext+30 ; "8"
jmp txtout
+ cmp #64 ; check for 16K
bne ++
lda #'1'
sta pettext+29 ; "1"
lda #'6'
sta pettext+30 ; "6"
jmp txtout
++ cmp #128 ; check for 16K
bne unkmem
lda #'3'
sta pettext+29 ; "3"
lda #'2'
sta pettext+30 ; "2"
jmp txtout
unkmem lda #'?' ; unknown size
sta pettext+29 ; "?"
sta pettext+30 ; "?"
txtout: ldy #$00
- lda pettext,y ; point text
sta $8000,y ; drop some text on the screen
iny
cpy #39
bne -
rts
bas2found: lda #'2'
sta pettext+6 ; insert "2" in text
lda 51
jsr checkmem
rts
bas4found: lda #'4'
sta pettext+6 ; insert "4" in text
lda 51
cmp #31 ; check for 8K
bne +
lda #'8'
sta pettext+30 ; "8"
jmp txtout
+ cmp #63 ; check for 16K
bne ++
lda #'1'
sta pettext+29 ; "1"
lda #'6'
sta pettext+30 ; "6"
jmp txtout
++ cmp #127 ; check for 16K
bne unkmem
lda #'3'
sta pettext+29 ; "3"
lda #'2'
sta pettext+30 ; "2"
ldx #00 ; crtc check
- lda crtc,x ; check a few editor-rom bytes
cmp $e000,x
bne +
inx
cpx #8
bne -
lda #'8'
sta pettext+18 ; "8"0 column
bne ++
+ jsr txtout
rts
++ lda #%11111000 ; cbm 8x96 check
sta $fff0
sei
ldx #$00
- lda testbytes,x
sta $c000,x
inx
cpx #20
bne -
ldx #$00
- lda $c000,x
cmp testbytes,x
bne +
inx
cpx #20
bne -
cli
lda #$00
sta $fff0
ldy #$00
- lda cbm8296,y
sta $8372,y ; drop some text on the screen
iny
cpy #$10
bne -
lda #$04
sta machine ; set machine: Basic4/8296
+ jsr txtout
rts
machine !by $00
;--------------------------------------------------
; Basic 4 and CRTC bytes for comparing
;--------------------------------------------------
basic4 !byte $2A,$2A,$2A,$20,$43,$4f,$4D,$4D ;*** comm ; $dea4
!byte $4F,$44,$4F,$52,$45,$20,$42,$41 ;odore ba
!byte $53,$49,$43,$20,$34,$2E,$30,$20 ;sic 4.0
!byte $2A,$2A,$2A,$0D,$0D,$00 ;***...
crtc !byte $4C,$4B,$E0,$4C,$A7,$E0,$4C,$16,$E1 ; editor rom $e000 (cbm 8000)
testbytes !PET "may there any ram ? "
cbm8296 !PET "cbm 8x96"
pettext !PET "basic detected (40 column) k "
unkroms !PET "basic not detected ! "Letzte Änderung: 2019-01-04 09:54:08