127 lines
2.2 KiB
Text
127 lines
2.2 KiB
Text
*=$0801
|
|
db $0E,$08,$0A,$00,$9E,$20,$28,$32,$30,$36,$34,$29,$00,$00,$00 ;required init code on commodore 64 floppy disks
|
|
*=$0810
|
|
|
|
lda #$0e
|
|
jsr chrout ;required for my printing routine to work.
|
|
|
|
z_HL equ $02
|
|
z_L equ $02
|
|
z_H equ $03
|
|
z_B equ $04
|
|
|
|
|
|
|
|
loadpair z_HL,TestString0
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString1
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString2
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString3
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString4
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString5
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString6
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString7
|
|
jsr isStringNumeric
|
|
|
|
loadpair z_HL,TestString8
|
|
jsr isStringNumeric
|
|
rts ;return to basic
|
|
|
|
isStringNumeric:
|
|
; input: z_HL = source address
|
|
pushY
|
|
ldy #0
|
|
sty z_B ;our tally for decimal points
|
|
|
|
checkFirstChar:
|
|
lda (z_HL),y
|
|
beq notNumeric ;a null string is not a valid number!
|
|
cmp #'-'
|
|
beq isNegative_OK
|
|
cmp #'.'
|
|
beq isFloat_OK
|
|
and #$30
|
|
cmp #$30
|
|
beq isNumeral_OK
|
|
;else, is not numeric
|
|
notNumeric:
|
|
popY
|
|
jsr PrintString_TextScreen ;prints what's already in z_HL
|
|
jsr NewLine
|
|
loadpair z_HL,isStringNumeric_Fail
|
|
jsr PrintString_TextScreen
|
|
jsr NewLine
|
|
jmp NewLine
|
|
;rts
|
|
isNegative_OK:
|
|
isNumeral_OK:
|
|
iny
|
|
jmp loop_isStringNumeric
|
|
isFloat_OK:
|
|
iny
|
|
inc z_B
|
|
loop_isStringNumeric:
|
|
lda (z_HL),y
|
|
beq Terminated_isStringNumeric
|
|
cmp #'.'
|
|
beq CheckIfDecimalAlreadyOccurred
|
|
and #$30
|
|
cmp #$30
|
|
bne notNumeric
|
|
loop_overhead_isStringNumeric:
|
|
iny
|
|
jmp loop_isStringNumeric
|
|
|
|
CheckIfDecimalAlreadyOccurred:
|
|
lda z_B
|
|
bne notNumeric
|
|
inc z_B
|
|
jmp loop_overhead_isStringNumeric
|
|
|
|
Terminated_isStringNumeric:
|
|
;if we got this far the string is numeric.
|
|
popY
|
|
jsr PrintString_TextScreen ;prints what's already in z_HL
|
|
jsr NewLine
|
|
loadpair z_HL,isStringNumeric_Pass
|
|
jsr PrintString_TextScreen
|
|
jsr NewLine
|
|
jmp NewLine
|
|
;rts
|
|
|
|
isStringNumeric_Pass:
|
|
db "IS NUMERIC",0
|
|
isStringNumeric_Fail:
|
|
db "IS NOT NUMERIC",0
|
|
|
|
TestString0:
|
|
db 0
|
|
TestString1:
|
|
db "123",0
|
|
TestString2:
|
|
db "-30",0
|
|
TestString3:
|
|
db "123.45",0
|
|
TestString4:
|
|
db "-123.45",0
|
|
TestString5:
|
|
db "ABCDE",0
|
|
TestString6:
|
|
db "-34-5",0
|
|
TestString7:
|
|
db "1.000.000",0
|
|
TestString8:
|
|
db ".23456",0
|