@@ -817,7 +817,8 @@ REM REAL BBC! YES: 128
817
817
PRINT ?(R%)` ) ;
818
818
expectArray ( testMachine , [ 128 ] ) ;
819
819
} ) ;
820
- it ( "VIA.PB7 - sys via checks" , async function ( ) {
820
+ // TODO fix! this is broken currently
821
+ it . skip ( "VIA.PB7 - sys via checks" , async function ( ) {
821
822
const testMachine = await runViaProgram ( `
822
823
PRINT "RUN AFTER FRESH BOOT"
823
824
R% = ${ resultAddress }
@@ -852,6 +853,211 @@ IF E% <> A% THEN R$ = "FAIL!"
852
853
IF E% <> A% THEN ?R% = 255
853
854
PRINT R$ + ": " + N$ + ": " + STR$(A%)
854
855
ENDPROC` ) ;
855
- expectArray ( testMachine , [ 255 ] ) ; // TODO set to 0 and fix! this is broken currently
856
+ expectArray ( testMachine , [ 0 ] ) ;
857
+ } ) ;
858
+ it ( "VIA.T11 - How does T1 tick across expiry?" , async function ( ) {
859
+ const testMachine = await runViaProgram ( `
860
+ REM RESET ACR TO DEFAULT BOOT + MOS 1.2 STATE
861
+ R% = ${ resultAddress }
862
+ PRINT "VIA TEST: HOW DOES T1 TICK ACROSS EXPIRY?"
863
+ PRINT "REAL BBC: 1, 0, 255, 4, 3, 2"
864
+ ?&FE6B = 0
865
+ REM QUICK CHECKS TO SEE IF TIMERS ARE RUNNING ETC.
866
+ PRINT "USER VIA IFR: " + STR$(?&FE6D)
867
+ FOR A%=0 TO 1
868
+ PRINT "USER VIA T1CH: " + STR$(?&FE65)
869
+ PRINT "USER VIA T1CL: " + STR$(?&FE64)
870
+ NEXT
871
+ DIM MC% 100
872
+ PROCtimeit(1)
873
+ PROCtimeit(2)
874
+ PROCtimeit(3)
875
+ PROCtimeit(4)
876
+ PROCtimeit(5)
877
+ PROCtimeit(6)
878
+ END
879
+ DEF PROCtimeit(N%)
880
+ P% = MC%
881
+ [
882
+ OPT 0
883
+ SEI
884
+ LDX #0
885
+ LDY #0
886
+ LDA #4
887
+ STA &FE64
888
+ LDA #0
889
+ STA &FE65
890
+ ]
891
+ FOR A%=1 TO N%
892
+ [
893
+ OPT 0
894
+ NOP
895
+ ]
896
+ NEXT
897
+ [
898
+ OPT 0
899
+ LDA &FE64
900
+ STA &FE6A
901
+ CLI
902
+ RTS
903
+ ]
904
+ CALL MC%
905
+ PRINT "USER VIA T1CL: " + STR$(?&FE6A)
906
+ ?R% = ?&FE6A
907
+ R% = R% + 1
908
+ ENDPROC` ) ;
909
+ expectArray ( testMachine , [ 1 , 0 , 255 , 4 , 3 , 2 ] ) ;
910
+ } ) ;
911
+ it ( "VIA.T12 - When do T1L writes take effect vs. timer expiry?" , async function ( ) {
912
+ const testMachine = await runViaProgram ( `
913
+ DIM MC% 100
914
+ R% = ${ resultAddress }
915
+ P% = MC%
916
+ [
917
+ OPT 3
918
+ SEI
919
+ LDA #&00
920
+ STA &FE6B
921
+ LDA #&7F
922
+ STA &FE6E
923
+ LDA #&02
924
+ STA &FE64
925
+ LDA #&00
926
+ STA &FE65
927
+ LDA #&FF
928
+ STA &FE66
929
+ LDA &FE64
930
+ STA R%
931
+ LDA #&03
932
+ STA &FE64
933
+ LDA #&00
934
+ STA &FE65
935
+ NOP
936
+ NOP
937
+ LDA #&FF
938
+ STA &FE66
939
+ LDA &FE64
940
+ STA R%+1
941
+ CLI
942
+ RTS
943
+ ]
944
+ CALL MC%
945
+ REM REAL BBC: 253, 0
946
+ PRINT "VIA TEST: WHEN DO T1L WRITES TAKE EFFECT VS. TIMER EXPIRY?"
947
+ PRINT "REAL BBC: 253, 0"
948
+ PRINT ?(R%)
949
+ PRINT ?(R%+1)` ) ;
950
+ expectArray ( testMachine , [ 253 , 0 ] ) ;
951
+ } ) ;
952
+ it ( "VIA.T21 - user VIA T2 to pulse counting?" , async function ( ) {
953
+ const testMachine = await runViaProgram ( `
954
+ REM USER VIA T2 TO PULSE COUNTING
955
+ REM FREEZES T2
956
+ R% = ${ resultAddress }
957
+ PRINT "VIA TEST: T2 IN PULSE COUNTING MODE"
958
+ PRINT "REAL BBC: 1, 255, 255"
959
+ ?&FE6B = &20
960
+ ?&FE68 = 1
961
+ ?&FE69 = 0
962
+ R%?0 = ?&FE68
963
+ ?&FE68 = &FF
964
+ ?&FE69 = &FF
965
+ R%?1 = ?&FE68
966
+ R%?2 = ?&FE68
967
+ PRINT "USER VIA T2CL: " + STR$(R%?0)
968
+ PRINT "USER VIA T2CL: " + STR$(R%?1)
969
+ PRINT "USER VIA T2CL: " + STR$(R%?2)` ) ;
970
+ expectArray ( testMachine , [ 1 , 255 , 255 ] ) ;
971
+ } ) ;
972
+ it ( "VIA.T22 - T2 ticking past expiry" , async function ( ) {
973
+ const testMachine = await runViaProgram ( `
974
+ REM RESET ACR TO DEFAULT BOOT + MOS 1.2 STATE
975
+ R% = ${ resultAddress }
976
+ PRINT "VIA TEST: T2 TICKING PAST EXPIRY"
977
+ PRINT "REAL BBC: 1, 0, 255, 254, 253, 252"
978
+ ?&FE6B = 0
979
+ REM QUICK CHECKS TO SEE IF TIMERS ARE RUNNING ETC.
980
+ PRINT "USER VIA IFR: " + STR$(?&FE6D)
981
+ FOR A%=0 TO 1
982
+ PRINT "USER VIA T2CH: " + STR$(?&FE69)
983
+ PRINT "USER VIA T2CL: " + STR$(?&FE68)
984
+ NEXT
985
+ DIM MC% 100
986
+ PROCtimeit(1)
987
+ PROCtimeit(2)
988
+ PROCtimeit(3)
989
+ PROCtimeit(4)
990
+ PROCtimeit(5)
991
+ PROCtimeit(6)
992
+ END
993
+ DEF PROCtimeit(N%)
994
+ P% = MC%
995
+ [
996
+ OPT 0
997
+ SEI
998
+ LDX #0
999
+ LDY #0
1000
+ LDA #4
1001
+ STA &FE68
1002
+ LDA #0
1003
+ STA &FE69
1004
+ ]
1005
+ FOR A%=1 TO N%
1006
+ [
1007
+ OPT 0
1008
+ NOP
1009
+ ]
1010
+ NEXT
1011
+ [
1012
+ OPT 0
1013
+ LDA &FE68
1014
+ STA &FE6A
1015
+ CLI
1016
+ RTS
1017
+ ]
1018
+ CALL MC%
1019
+ PRINT "USER VIA T2CL: " + STR$(?&FE6A)
1020
+ ?R% = ?&FE6A
1021
+ R% = R% + 1
1022
+ ENDPROC` ) ;
1023
+ expectArray ( testMachine , [ 1 , 0 , 255 , 254 , 253 , 252 ] ) ;
1024
+ } ) ;
1025
+ // Disabled, @scarybeasts comments:
1026
+ // I fixed everything except VIA.T23, which doesn't seem important. It's tricky for code to really rely on T2
1027
+ // values after toggling ACR 0x20 because results will vary depending on what is attached and generating pulses
1028
+ // from external.
1029
+ it . skip ( "VIA.T22 - what values do we get freezing and starting T2?" , async function ( ) {
1030
+ const testMachine = await runViaProgram ( `
1031
+ DIM MC% 100
1032
+ R% = ${ resultAddress }
1033
+ P% = MC%
1034
+ [
1035
+ OPT 3
1036
+ SEI
1037
+ LDA #&40
1038
+ STA &FE4B
1039
+ LDA #&FF
1040
+ STA &FE48
1041
+ STA &FE49
1042
+ LDA #&60
1043
+ STA &FE4B
1044
+ LDA &FE48
1045
+ STA R%
1046
+ LDA #&40
1047
+ STA &FE4B
1048
+ LDA &FE48
1049
+ STA R%+1
1050
+ LDA #&60
1051
+ STA &FE4B
1052
+ CLI
1053
+ RTS
1054
+ ]
1055
+ CALL MC%
1056
+ REM REAL BBC: 251, 249
1057
+ PRINT "VIA TEST: WHAT VALUES DO WE GET FREEZING AND STARTING T2?"
1058
+ PRINT "REAL BBC: 251, 249"
1059
+ PRINT ?(R%)
1060
+ PRINT ?(R%+1)` ) ;
1061
+ expectArray ( testMachine , [ 251 , 249 ] ) ;
856
1062
} ) ;
857
1063
} ) ;
0 commit comments