Advertisement
prjbrook

SCARTb.ASM 1802 SUBROUTINES METHOD

Mar 30th, 2020
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. ;Tue Mar 31 14:48:41 NZDT 2020 scartB.asm. Now trying to call a subroutine inside another one.
  2. ;Tue Mar 31 11:56:17 NZDT 2020. Don e below. Now want to get the SCART routines going for subroutine calls.
  3. ;Sun Mar 29 15:49:01 NZDT 2020. Looking now at long branches into page1,2 and 3.
  4. START ORG 0
  5. seq
  6. req
  7. seq
  8. ldi $00
  9. phi 2 ;R2 is stack pointer
  10. ldi $ff
  11. plo 2 ;R2=stack pointer now points to $00ff
  12. sex 2 ;X now pnts to R2, the stack pointer. 00ff
  13. ldi $03
  14. phi 7
  15. ldi $98
  16. plo 7 ;R7 contains aritrary pointer 0398
  17.  
  18. ldi HIGH(main)
  19. phi 3
  20. ldi LOW(main)
  21. plo 3 ;R3 now points to main; becomes main prog counter.
  22.  
  23. ldi HIGH(callr)
  24. phi 4
  25. ldi LOW(callr)
  26. plo 4 ;r4 now contains pointer to callr
  27. ldi HIGH(retr)
  28. phi 5
  29. ldi LOW(retr)
  30. plo 5 ;r5 now contains pointer to callr
  31.  
  32. sep 3 ;sp points to main
  33. nop ;never get here
  34.  
  35. main
  36. ldi $12
  37. phi 6
  38. ldi $34
  39. plo 6 ;just to see something in there,r6, for debugging.
  40.  
  41. ldi $ff ;dummy write just to see we got here ok
  42. str 7 ;M(R7) now cointains $ff
  43.  
  44. sep 4
  45. dw sub1 ;call sub1
  46.  
  47. ldi $ee ;dummy write just to see we got here ok
  48. inc 7
  49. str 7
  50.  
  51. sep 4
  52. dw sub2 ;call sub2
  53.  
  54. ldi $dd ;dummy write just to see we got here ok
  55. inc 7
  56. str 7
  57.  
  58. idl ;finish
  59. exita
  60. sep 3
  61. callr ;code for call routine goes here. r4 is pointer.
  62. nop ;assume x=2 and r2 is stack pointer
  63. sex 2 ;in case x was changed by some other code. Point to stack with r2.
  64. ghi 6
  65. stxd
  66. glo 6
  67. stxd ;r6 now pushed onto stack
  68. ghi 3
  69. phi 6
  70. glo 3
  71. plo 6 ;r3 now saved in r6. NB r6 ponts just past calling sep
  72. lda 6 ;get first byte after calling sep
  73. phi 3
  74. lda 6
  75. plo 3 ;now r3 points to called subroutine
  76. br exita ;branch to entry pnt of callr. So r4 pnts to callr, for other calls. Brilliant.
  77.  
  78. ; sep 3 ;jump to new subroutine
  79.  
  80. exitr
  81. sep 3
  82. retr ;code for return subroutine goes here. r5 is pointer.
  83. nop ;come here after subroutine over
  84. ghi 6
  85. phi 3
  86. glo 6
  87. plo 3 ;r6 copied into r3. Soon to be PC
  88. sex 2 ;point to stack, maybe unnecessary. Put in anyway.
  89. inc 2 ;to point to old r6
  90. ldxa ;get stacked low byte
  91. plo 6
  92. ldx
  93. phi 6 ;now old r6 restored and stack pointer ok
  94. br exitr
  95. ; sep 3 ;go back to main program.
  96.  
  97. sub1
  98. inc 7
  99. ldi $11
  100. str 7
  101. sep 5 ;all returns go via retr that's pointed to by r5
  102. sub2
  103. inc 7
  104. ldi $22
  105. str 7
  106. sep 4
  107. dw sub3
  108. sep 5
  109.  
  110. sub3
  111. inc 7
  112. ldi $33
  113. str 7
  114. sep 5
  115.  
  116.  
  117. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement