Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

180 lignes
4.0KB

  1. ; E04-S08: parse args.n8 and run Calc.twice, which pushes one byte argument,
  2. ; enters a sized frame in Calc.scale, and returns a byte.
  3. ;
  4. ; The first emitted body is Calc.twice at cg_code+0. The fixture supplies the
  5. ; frame runtime entry points, so the prologue emitted at the start of twice
  6. ; calls frame_enter(0), and scale reads its parameter at FP+2. twice returns
  7. ; self.scale(3); scale returns n + 3, so the expected result is 6.
  8. ;
  9. ; Mailbox data: +0 diagnostics, +1 em_bad, +2 result, +3 cg_len, +4 cg_err,
  10. ; +5 fl_err. FAIL stage: 1 load, 2 diagnostics, 3 emitter, 4 result.
  11. .setcpu "6502"
  12. .include "../../src/common/c128.inc"
  13. .include "../../src/common/mailbox.inc"
  14. .include "../../src/common/formats.inc"
  15. .import mmu_init, mmu_bank0, mmu_shutdown
  16. .import src_load, src_dos_code, src_kernal_err
  17. .import names_init
  18. .import diag_init, diag_finish, diag_screen
  19. .import parse_file_framed
  20. .import em_on, em_bad
  21. .import cg_code, cg_len, cg_err
  22. .import fl_err, fl_enter, fl_leave, fl_discard, fl_push, fl_push_word
  23. .import frame_init, frame_enter, frame_leave, frame_discard
  24. .import frame_push_byte, frame_push_word
  25. .macro ON_ZERO target
  26. beq :+
  27. jmp target
  28. :
  29. .endmacro
  30. .segment "LOADADDR"
  31. .word $1C01
  32. .segment "EXEHDR"
  33. .word basic_end
  34. .word 10
  35. .byte $9E
  36. .byte "7181"
  37. .byte $00
  38. basic_end:
  39. .word $0000
  40. .segment "MAILBOX"
  41. .res MB_SIZE
  42. .segment "STARTUP"
  43. .export test_entry
  44. test_entry:
  45. php
  46. sei
  47. ldx #MB_SIZE - 1
  48. lda #$00
  49. @clr: sta MB_BASE,x
  50. dex
  51. bpl @clr
  52. lda #MB_MAGIC0_VALUE
  53. sta MB_MAGIC0
  54. lda #MB_MAGIC1_VALUE
  55. sta MB_MAGIC1
  56. lda #MB_PROD_COMPILER
  57. sta MB_PRODUCER
  58. lda #MB_ST_RUNNING
  59. sta MB_STATUS
  60. jsr mmu_init
  61. jsr mmu_bank0
  62. lda #<frame_enter
  63. sta fl_enter
  64. lda #>frame_enter
  65. sta fl_enter+1
  66. lda #<frame_leave
  67. sta fl_leave
  68. lda #>frame_leave
  69. sta fl_leave+1
  70. lda #<frame_discard
  71. sta fl_discard
  72. lda #>frame_discard
  73. sta fl_discard+1
  74. lda #<frame_push_byte
  75. sta fl_push
  76. lda #>frame_push_byte
  77. sta fl_push+1
  78. lda #<frame_push_word
  79. sta fl_push_word
  80. lda #>frame_push_word
  81. sta fl_push_word+1
  82. lda #<name_src
  83. ldx #>name_src
  84. ldy #name_src_len
  85. jsr src_load
  86. cmp #$00
  87. ON_ZERO @fail_load
  88. jsr names_init
  89. lda #<name_src
  90. ldx #>name_src
  91. ldy #name_src_len
  92. jsr diag_init
  93. lda #$00
  94. sta diag_screen
  95. lda #$01
  96. sta em_on
  97. jsr parse_file_framed
  98. jsr diag_finish
  99. sta MB_DATA+0
  100. lda em_bad
  101. sta MB_DATA+1
  102. lda cg_len
  103. sta MB_DATA+3
  104. lda cg_err
  105. sta MB_DATA+4
  106. lda fl_err
  107. sta MB_DATA+5
  108. lda MB_DATA+0
  109. ON_ZERO @fail_diag
  110. lda em_bad
  111. ON_ZERO @fail_emit
  112. lda cg_err
  113. ON_ZERO @fail_cg
  114. lda fl_err
  115. ON_ZERO @fail_cg
  116. jmp @run
  117. @fail_cg:
  118. lda #3
  119. jmp @fail
  120. @run: jsr frame_init
  121. ldx #3 ; descriptor + zeroed byte field
  122. lda #$00
  123. @obj: sta object,x
  124. dex
  125. bpl @obj
  126. lda #<object
  127. ldx #>object
  128. jsr cg_code
  129. sta MB_DATA+2
  130. cmp #$06
  131. beq @pass
  132. lda #4
  133. jmp @fail
  134. @fail_load:
  135. sta MB_DATA+4
  136. lda src_dos_code
  137. sta MB_DATA+5
  138. lda src_kernal_err
  139. sta MB_DATA+6
  140. lda #1
  141. jmp @fail
  142. @fail_diag:
  143. lda #2
  144. jmp @fail
  145. @fail_emit:
  146. lda #3
  147. @fail: sta MB_CODE
  148. lda #$00
  149. sta MB_CODE+1
  150. lda #MB_ST_FAIL
  151. sta MB_STATUS
  152. jmp @done
  153. @pass: lda #MB_ST_PASS
  154. sta MB_STATUS
  155. @done: jsr mmu_shutdown
  156. plp
  157. rts
  158. .segment "RODATA"
  159. name_src: .byte "ARGS.N8"
  160. name_src_len = * - name_src
  161. .segment "BSS"
  162. object: .res 4

Powered by TurnKey Linux.