summaryrefslogtreecommitdiff
path: root/assembly/rrxing2/ui.S
diff options
context:
space:
mode:
Diffstat (limited to 'assembly/rrxing2/ui.S')
-rw-r--r--assembly/rrxing2/ui.S392
1 files changed, 388 insertions, 4 deletions
diff --git a/assembly/rrxing2/ui.S b/assembly/rrxing2/ui.S
index ba1611a..d6c8cd0 100644
--- a/assembly/rrxing2/ui.S
+++ b/assembly/rrxing2/ui.S
@@ -1,3 +1,8 @@
+# Railroad Crossing 2 for RVController - User Interface
+# A product of Scheiße & Broken Signalling Systems, a Cheapie Systems company
+# This is free and unencumbered software released into the public domain.
+# See http://unlicense.org/ for more information
+
# UI Pages
# Page 0: Idle/Active Screen
# Page 1: Main Menu
@@ -8,6 +13,16 @@
# Page 6: Extension Time Adjustment
# Page 7: Invalid Input Message for Time Adjustments
# Page 8: Diagnostics Menu
+# Page 9: Output Test Menu
+# Page 10: Road Signal Test
+# Page 11: Rail Signal Test
+# Page 12: Bell Test
+# Page 13: Gate Test
+# Page 14: Statistics
+# Page 15: About 1
+# Page 16: About 2
+# Page 17: About 3
+# Page 18: About 4
mainloop:
la t0,uipage
@@ -128,12 +143,17 @@ bne a0,t0,1f
la t1,uipage
li t2,3
sb t2,0(t1) # User entered '2', go to timing adjustment (page 3)
-1:li t0,'3'
+1: li t0,'3'
bne a0,t0,1f
la t1,uipage
li t2,8
sb t2,0(t1) # User entered '3', go to diagnostics (page 8)
-1:li t0,'0'
+1: li t0,'4'
+bne a0,t0,1f
+la t1,uipage
+li t2,15
+sb t2,0(t1) # User entered '4', go to about 1 (page 15)
+1: li t0,'0'
bne a0,t0,1f
la t1,uipage
sb x0,0(t1) # User entered '0', go to idle screen (page 0)
@@ -451,6 +471,357 @@ uihandlediagnostics:
lpad 9
li a7,132
ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la t1,uipage
+li t0,9
+sb t0,0(t1) # User entered '1', go to output test (page 9)
+1: li t0,'2'
+bne a0,t0,1f
+la t1,uipage
+li t0,14
+sb t0,0(t1) # User entered '1', go to statistics (page 14)
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,1
+sb t0,0(t1) # User entered '0', go to main menu (page 1)
+1: ret
+
+.align 2
+uidrawoutputtest:
+lpad 10
+la a0,uioutputtest
+li a7,4
+ecall
+ret
+
+.align 2
+uihandleoutputtest:
+lpad 10
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la t1,uipage
+li t0,10
+sb t0,0(t1) # User entered '1', go to light test (page 10)
+1: li t0,'2'
+bne a0,t0,1f
+la t1,uipage
+li t0,11
+sb t0,0(t1) # User entered '2', go to signal test (page 11)
+1: li t0,'3'
+bne a0,t0,1f
+la t1,uipage
+li t0,12
+sb t0,0(t1) # User entered '3', go to bell test (page 12)
+1: li t0,'4'
+bne a0,t0,1f
+la t1,uipage
+li t0,13
+sb t0,0(t1) # User entered '4', go to gate test (page 13)
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,8
+sb t0,0(t1) # User entered '0', go to diagnostics (page 8)
+1: ret
+
+.align 2
+uidrawlighttest:
+lpad 11
+la a0,uilighttest
+li a7,4
+ecall
+ret
+
+.align 2
+uihandlelighttest:
+lpad 11
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightoffmsg
+li a7,129
+ecall # User entered '1', command light to off
+1: li t0,'2'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightredmsg
+li a7,129
+ecall # User entered '2', command light to red
+1: li t0,'3'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightyellowmsg
+li a7,129
+ecall # User entered '3', command light to yellow
+1: li t0,'4'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightgreenmsg
+li a7,129
+ecall # User entered '4', command light to green
+1: li t0,'5'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightflashredmsg
+li a7,129
+ecall # User entered '5', command light to flashing red
+1: li t0,'6'
+bne a0,t0,1f
+la a0,lightchannel
+la a1,lightflashyellowmsg
+li a7,129
+ecall # User entered '6', command light to flashing yellow
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,9
+sb t0,0(t1) # User entered '0', go to output test (page 9)
+1: ret
+
+.align 2
+uidrawsignaltest:
+lpad 12
+la a0,uisignaltest
+li a7,4
+ecall
+ret
+
+.align 2
+uihandlesignaltest:
+lpad 12
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightoffmsg
+li a7,129
+ecall # User entered '1', command signal to off
+1: li t0,'2'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightredmsg
+li a7,129
+ecall # User entered '2', command signal to red
+1: li t0,'3'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightyellowmsg
+li a7,129
+ecall # User entered '3', command signal to yellow
+1: li t0,'4'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightgreenmsg
+li a7,129
+ecall # User entered '4', command signal to green
+1: li t0,'5'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightflashredmsg
+li a7,129
+ecall # User entered '5', command signal to flashing red
+1: li t0,'6'
+bne a0,t0,1f
+la a0,signalchannel
+la a1,lightflashyellowmsg
+li a7,129
+ecall # User entered '6', command signal to flashing yellow
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,9
+sb t0,0(t1) # User entered '0', go to output test (page 9)
+1: ret
+
+.align 2
+uidrawbelltest:
+lpad 13
+la a0,uibelltest
+li a7,4
+ecall
+ret
+
+.align 2
+uihandlebelltest:
+lpad 13
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la a0,bellchannel
+la a1,belloffmsg
+li a7,129
+ecall # User entered '1', command bell to off
+1: li t0,'2'
+bne a0,t0,1f
+la a0,bellchannel
+la a1,bellonmsg
+li a7,129
+ecall # User entered '2', command bell to on
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,9
+sb t0,0(t1) # User entered '0', go to output test (page 9)
+1: ret
+
+.align 2
+uidrawgatetest:
+lpad 14
+la a0,uigatetest
+li a7,4
+ecall
+ret
+
+.align 2
+uihandlegatetest:
+lpad 14
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la a0,gatechannel
+la a1,gateupmsg
+li a7,129
+ecall # User entered '1', command gate to up
+1: li t0,'2'
+bne a0,t0,1f
+la a0,gatechannel
+la a1,gatedownmsg
+li a7,129
+ecall # User entered '2', command gate to down
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,9
+sb t0,0(t1) # User entered '0', go to output test (page 9)
+1: ret
+
+.align 2
+uidrawstatistics:
+lpad 15
+cm.push {ra},-16
+la a0,uistatistics+21
+rdcycle a1
+call hexdump
+la a0,uistatistics+39
+rdtime a1
+call hexdump
+la a0,uistatistics+57
+rdinstret a1
+call hexdump
+la a0,uistatistics
+li a7,4
+ecall
+cm.popret {ra},16
+
+.align 2
+uihandlestatistics:
+lpad 15
+li a7,132
+ecall # Read one character of input
+li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,8
+sb t0,0(t1) # User entered '0', go to diagnostics (page 8)
+1: ret
+
+.align 2
+uidrawabout1:
+lpad 16
+la a0,uiabout1
+li a7,4
+ecall
+ret
+
+.align 2
+uihandleabout1:
+lpad 16
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la t1,uipage
+li t0,16
+sb t0,0(t1) # User entered '1', go to about 2 (page 16)
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,1
+sb t0,0(t1) # User entered '0', go to main menu (page 1)
+1: ret
+
+.align 2
+uidrawabout2:
+lpad 17
+la a0,uiabout2
+li a7,4
+ecall
+ret
+
+.align 2
+uihandleabout2:
+lpad 17
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la t1,uipage
+li t0,17
+sb t0,0(t1) # User entered '1', go to about 3 (page 17)
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,1
+sb t0,0(t1) # User entered '0', go to main menu (page 1)
+1: ret
+
+.align 2
+uidrawabout3:
+lpad 18
+la a0,uiabout3
+li a7,4
+ecall
+ret
+
+.align 2
+uihandleabout3:
+lpad 18
+li a7,132
+ecall # Read one character of input
+li t0,'1'
+bne a0,t0,1f
+la t1,uipage
+li t0,18
+sb t0,0(t1) # User entered '1', go to about 4 (page 18)
+1: li t0,'0'
+bne a0,t0,1f
+la t1,uipage
+li t0,1
+sb t0,0(t1) # User entered '0', go to main menu (page 1)
+1: ret
+
+.align 2
+uidrawabout4:
+lpad 19
+la a0,uiabout4
+li a7,4
+ecall
+ret
+
+.align 2
+uihandleabout4:
+lpad 19
+li a7,132
+ecall # Read one character of input
li t0,'0'
bne a0,t0,1f
la t1,uipage
@@ -459,19 +830,32 @@ sb t0,0(t1) # User entered '0', go to main menu (page 1)
1: ret
uidrawpointers: .word uidrawidle,uidrawmainmenu,uidrawcountryselect,uidrawadjusttiming,uidrawgatedropdelay,uidrawinitialtime,uidrawextensiontime,uidrawinvalidinput,uidrawdiagnostics
+.word uidrawoutputtest,uidrawlighttest,uidrawsignaltest,uidrawbelltest,uidrawgatetest,uidrawstatistics,uidrawabout1,uidrawabout2,uidrawabout3,uidrawabout4
+
uihandlepointers: .word uihandleidle,uihandlemainmenu,uihandlecountryselect,uihandleadjusttiming,uihandlegatedropdelay,uihandleinitialtime,uihandleextensiontime,uihandleinvalidinput,uihandlediagnostics
+.word uihandleoutputtest,uihandlelighttest,uihandlesignaltest,uihandlebelltest,uihandlegatetest,uihandlestatistics,uihandleabout1,uihandleabout2,uihandleabout3,uihandleabout4
uipage: .byte 0
uiidle: .asciz "\nRailroad Crossing 2\nfor RVController\nMode: ??\n\nPress 'm' for menu\n'a' to activate now"
uiactive: .asciz "\nRailroad Crossing 2\nfor RVController\nMode: ??\nCrossing is active\n\nPress 'm' for menu"
-uimainmenu: .asciz "\nMAIN MENU\n1: Change Country\n2: Adjust Timing\n3: Diagnostics\n\n0: Exit"
+uimainmenu: .asciz "\nMAIN MENU\n1: Change Country\n2: Adjust Timing\n3: Diagnostics\n4: About\n0: Exit"
uicountryselect: .asciz "\nCHANGE COUNTRY\n1: Germany\n2: United Kingdom\n3: United States\n\n0: Cancel"
uiadjusttiming: .asciz "\nADJUST TIMING\n1: Gate Drop Delay\n2: Init. Active Time\n3: Extension Time\n\n0: Back"
uigatedropdelay: .asciz "\nGATE DROP DELAY\n\nCurrent: XX sec\n\nEnter new time or\n'c' to cancel:"
uiinitialtime: .asciz "\nINIT. ACTIVE TIME\n\nCurrent: XX sec\n\nEnter new time or\n'c' to cancel:"
uiextensiontime: .asciz "\nEXTENSION TIME\n\nCurrent: XX sec\n\nEnter new time or\n'c' to cancel:"
uiinvalidinput: .asciz "\nInvalid entry\n\nPress any key\n\n\n"
-uidiagnostics: .asciz "\nDIAGNOSTICS\n1: Output Test\n\n\n\n0: Back"
+uidiagnostics: .asciz "\nDIAGNOSTICS\n1: Output Test\n2: Statistics\n\n\n0: Back"
+uioutputtest: .asciz "\nOUTPUT TEST\n1: Road Signal\n2: Rail Signal\n3: Bell\n4: Gate\n0: Back"
+uilighttest: .asciz "\nROAD SIGNAL TEST\n1: Off | 2: Red\n3: Yellow | 4: Green\n5: Flash Red\n6: Flash Yellow\n0: Back"
+uisignaltest: .asciz "\nRAIL SIGNAL TEST\n1: Off | 2: Red\n3: Yellow | 4: Green\n5: Flash Red\n6: Flash Yellow\n0: Back"
+uibelltest: .asciz "\nBELL TEST\n1: Off\n2: On\n\n\n0: Back"
+uigatetest: .asciz "\nGATE TEST\n1: Up\n2: Down\n\n\n0: Back"
+uistatistics: .asciz "\nSTATISTICS\n cycle: XXXXXXXX\n time: XXXXXXXX\ninstret: XXXXXXXX\n\n0: Back"
+uiabout1: .asciz "\nABOUT\nRailroad Crossing 2\nfor RVController\n\n\n1: Next | 0: Exit"
+uiabout2: .asciz "\nA product of\nScheiße & Broken\nSignalling Systems,\na Cheapie Systems\ncompany\n1: Next | 0: Exit"
+uiabout3: .asciz "\nThis is free and\nunencumbered\nsoftware released\ninto the public\ndomain\n1: Next | 0: Exit"
+uiabout4: .asciz "\nFor full license\ntext, see the\nincluded LICENSE\nfile, or visit\nunlicense.org\n0: Exit"
uide: .asciz "DE"
uiuk: .asciz "UK"
uius: .asciz "US"