head_em.s 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. .define EARRAY,ERANGE,EILLINS,EILLSIZE,ECASE,EMON,EHEAP
  2. .define hol0,trapproc,trpim,argv,hp,.reghp,envp,begbss,ignmask
  3. .define savebc,savede,savehl,saveix,saveaf,saveiy,ebadmon
  4. .define WRITE,EXIT
  5. .sect .text
  6. .sect .rom
  7. .sect .data
  8. .sect .bss
  9. .sect .text
  10. EARRAY = 0
  11. ERANGE = 1
  12. EHEAP = 17
  13. EILLINS=18
  14. EILLSIZE=19
  15. ECASE=20
  16. EMON=25
  17. ebadmon=25
  18. .sect .text
  19. ! clear .sect .bss
  20. ld sp,0x7ffe !address of fbase
  21. ld de,endbss
  22. ld h,d
  23. ld l,e
  24. ld bc,begbss
  25. xor a ! to clear carry
  26. sbc hl,bc
  27. ld a,h
  28. or l
  29. jr z,1f
  30. 2:
  31. xor a
  32. ld (de),a
  33. dec de
  34. dec hl
  35. ld a,h
  36. or l
  37. jr nz,2b
  38. 1: ! hl == 0
  39. ld bc,envp
  40. push bc
  41. ld bc,argv
  42. push bc
  43. ld bc,1
  44. push bc
  45. call __m_a_i_n
  46. EXIT:
  47. jp 0x20
  48. WRITE:
  49. jp __write
  50. .sect .bss
  51. begbss:
  52. .sect .data
  53. hol0:
  54. .data2 0,0
  55. .data2 0,0
  56. saveaf:
  57. .data2 0
  58. savebc:
  59. .data2 0
  60. savede:
  61. .data2 0
  62. savehl:
  63. .data2 0
  64. saveix:
  65. .data2 0
  66. saveiy:
  67. .data2 0
  68. ignmask:
  69. .data2 0
  70. hp:
  71. .data2 0
  72. trapproc:
  73. .data2 0
  74. trpim:
  75. .data2 0
  76. argv:
  77. .data2 3f
  78. envp:
  79. .data2 0
  80. 3:
  81. .asciz 'PROGRAM'
  82. .reghp:
  83. .data2 endbss