SHARE
TWEET

Untitled

a guest Mar 18th, 2012 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         org 32768
  2. __START_PROGRAM:
  3.         di
  4.         push ix
  5.         push iy
  6.         exx
  7.         push hl
  8.         exx
  9.         ld hl, 0
  10.         add hl, sp
  11.         ld (__CALL_BACK__), hl
  12.         ei
  13.         ld a, 8
  14.         push af
  15.         ld a, 084h
  16.         ld de, 00060h
  17.         ld bc, 00000h
  18.         push bc
  19.         push de
  20.         push af
  21.         ld a, 082h
  22.         ld de, 00040h
  23.         ld bc, 00000h
  24.         push bc
  25.         push de
  26.         push af
  27.         call _msxcolor
  28.         call _msx1cls
  29. __LABEL__lp1:
  30.         jp __LABEL__lp1
  31.         ld hl, 0
  32.         ld b, h
  33.         ld c, l
  34. __END_PROGRAM:
  35.         di
  36.         ld hl, (__CALL_BACK__)
  37.         ld sp, hl
  38.         exx
  39.         pop hl
  40.         exx
  41.         pop iy
  42.         pop ix
  43.         ei
  44.         ret
  45. __CALL_BACK__:
  46.         DEFW 0
  47. _msxcolor:
  48.         push ix
  49.         ld ix, 0
  50.         add ix, sp
  51.         push ix
  52.         pop hl
  53.         ld de, 5
  54.         add hl, de
  55.         call __PLOADF
  56.         call __FTOU32REG
  57.         ld a, l
  58.         ld (62441), a
  59.         push ix
  60.         pop hl
  61.         ld de, 11
  62.         add hl, de
  63.         call __PLOADF
  64.         call __FTOU32REG
  65.         ld a, l
  66.         ld (62442), a
  67.         ld a, (ix+17)
  68.         ld (62443), a
  69. _msxcolor__leave:
  70.         exx
  71.         ld hl, 14
  72. __EXIT_FUNCTION:
  73.         ld sp, ix
  74.         pop ix
  75.         pop de
  76.         add hl, sp
  77.         ld sp, hl
  78.         push de
  79.         exx
  80.         ret
  81. _msx1cls:
  82.         push ix
  83.         ld ix, 0
  84.         add ix, sp
  85. #line 1
  86.                 call 00c3h
  87. #line 2
  88. _msx1cls__leave:
  89.         ld sp, ix
  90.         pop ix
  91.         ret
  92. #line 1 "ftou32reg.asm"
  93. #line 1 "neg32.asm"
  94. __ABS32:
  95.                 bit 7, d
  96.                 ret z
  97.        
  98. __NEG32: ; Negates DEHL (Two's complement)
  99.                 ld a, l
  100.                 cpl
  101.                 ld l, a
  102.        
  103.                 ld a, h
  104.                 cpl
  105.                 ld h, a
  106.        
  107.                 ld a, e
  108.                 cpl
  109.                 ld e, a
  110.                
  111.                 ld a, d
  112.                 cpl
  113.                 ld d, a
  114.        
  115.                 inc l
  116.                 ret nz
  117.        
  118.                 inc h
  119.                 ret nz
  120.        
  121.                 inc de
  122.                 ret
  123.        
  124. #line 2 "ftou32reg.asm"
  125.        
  126. __FTOU32REG:    ; Converts a Float to (un)signed 32 bit integer (NOTE: It's ALWAYS 32 bit signed)
  127.                                         ; Input FP number in A EDCB (A exponent, EDCB mantissa)
  128.                                 ; Output: DEHL 32 bit number (signed)
  129.                 PROC
  130.        
  131.                 LOCAL __IS_FLOAT
  132.        
  133.                 or a
  134.                 jr nz, __IS_FLOAT
  135.                 ; Here if it is a ZX ROM Integer
  136.        
  137.                 ld h, c
  138.                 ld l, d
  139.         ld a, e  ; Takes sign: FF = -, 0 = +
  140.                 ld de, 0
  141.                 inc a
  142.                 jp z, __NEG32   ; Negates if negative
  143.                 ret
  144.        
  145. __IS_FLOAT:  ; Jumps here if it is a true floating point number
  146.                 ld h, e
  147.                 push hl  ; Stores it for later (Contains Sign in H)
  148.        
  149.                 push de
  150.                 push bc
  151.        
  152.                 exx
  153.                 pop de   ; Loads mantissa into C'B' E'D'
  154.                 pop bc   ;
  155.        
  156.                 set 7, c ; Highest mantissa bit is always 1
  157.                 exx
  158.        
  159.                 ld hl, 0 ; DEHL = 0
  160.                 ld d, h
  161.                 ld e, l
  162.        
  163.                 ;ld a, c  ; Get exponent
  164.                 sub 128  ; Exponent -= 128
  165.                 jr z, __FTOU32REG_END   ; If it was <= 128, we are done (Integers must be > 128)
  166.                 jr c, __FTOU32REG_END   ; It was decimal (0.xxx). We are done (return 0)
  167.        
  168.                 ld b, a  ; Loop counter = exponent - 128
  169.        
  170. __FTOU32REG_LOOP:
  171.                 exx      ; Shift C'B' E'D' << 1, output bit stays in Carry
  172.                 sla d
  173.                 rl e
  174.                 rl b
  175.                 rl c
  176.        
  177.             exx          ; Shift DEHL << 1, inserting the carry on the right
  178.                 rl l
  179.                 rl h
  180.                 rl e
  181.                 rl d
  182.        
  183.                 djnz __FTOU32REG_LOOP
  184.        
  185. __FTOU32REG_END:
  186.                 pop af   ; Take the sign bit
  187.                 or a     ; Sets SGN bit to 1 if negative
  188.                 jp m, __NEG32 ; Negates DEHL
  189.                
  190.                 ret
  191.        
  192.                 ENDP
  193.        
  194.        
  195. __FTOU8:        ; Converts float in C ED LH to Unsigned byte in A
  196.                 call __FTOU32REG
  197.                 ld a, l
  198.                 ret
  199.        
  200. #line 81 "code.bas"
  201. #line 1 "ploadf.asm"
  202.         ; Parameter / Local var load
  203.  
  204.         ; A => Offset
  205.  
  206.         ; IX = Stack Frame
  207.  
  208. ; RESULT: HL => IX + DE
  209.  
  210.        
  211.  
  212. #line 1 "iloadf.asm"
  213.         ; __FASTCALL__ routine which
  214.         ; loads a 40 bits floating point into A ED CB
  215.         ; stored at position pointed by POINTER HL
  216.         ;A DE, BC <-- ((HL))
  217.        
  218. __ILOADF:
  219.             ld a, (hl)
  220.             inc hl
  221.             ld h, (hl)
  222.             ld l, a
  223.        
  224.         ; __FASTCALL__ routine which
  225.         ; loads a 40 bits floating point into A ED CB
  226.         ; stored at position pointed by POINTER HL
  227.         ;A DE, BC <-- (HL)
  228.        
  229. __LOADF:    ; Loads a 40 bits FP number from address pointed by HL
  230.                 ld a, (hl)     
  231.                 inc hl
  232.                 ld e, (hl)
  233.                 inc hl
  234.                 ld d, (hl)
  235.                 inc hl
  236.                 ld c, (hl)
  237.                 inc hl
  238.                 ld b, (hl)
  239.                 ret
  240.        
  241. #line 7 "ploadf.asm"
  242.        
  243.  
  244. __PLOADF:
  245.  
  246.             push ix
  247.  
  248.             pop hl
  249.  
  250.             add hl, de
  251.  
  252.             jp __LOADF
  253.  
  254.            
  255.  
  256. #line 82 "code.bas"
  257.        
  258. ZXBASIC_USER_DATA:
  259.         ; Defines DATA END --> HEAP size is 0
  260. ZXBASIC_USER_DATA_END EQU ZXBASIC_MEM_HEAP
  261.         ; Defines USER DATA Length in bytes
  262. ZXBASIC_USER_DATA_LEN EQU ZXBASIC_USER_DATA_END - ZXBASIC_USER_DATA
  263.         END
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top