 This 256 bytes intro is completly firmware based. So it's slow but it can be seen as an exemple about how to use the firmware math and graphics jumblock.
This 256 bytes intro is completly firmware based. So it's slow but it can be seen as an exemple about how to use the firmware math and graphics jumblock.
» Shabok executable in a .DSK file.
; Shabok 256 bytes ; Shadebob effect 100% firmware based (slooooww) ; Done with WinAPE assembler (Maxam compatible) ; ; Grim/Arkos^Semilanceata org &4000 _GRA_SET_PEN EQU &BBDE _GRA_PLOT_ABSOLUTE EQU &BBEA _GRA_TEST_ABSOLUTE EQU &BBF0 _SET_ANGLE_MODE EQU &BD97 _REAL_SINE EQU &BDAC _REAL_ADDITION EQU &BD7C _REAL_MOVE EQU &BD61 _REAL_INT EQU &BD73 _REAL_MULTIPLICATION EQU &BD85 _SCR_SET_INK EQU &BC32 _SCR_SET_BORDER EQU &BC38 _SCR_SET_MODE EQU &BC0E ; Set the colors ld bc,0 call _SCR_SET_BORDER ld hl,shadebob_data_palette ld a,15 shadebob_setpalette ld b,(hl) inc hl ld c,b push af push hl call _SCR_SET_INK pop hl pop af dec a jp p,shadebob_setpalette ; Switch to MODE 0 (160x200x16) ld a,0 call _SCR_SET_MODE ; DEG ; tell the math firmware to deal with angle in degres ld a,1 call _SET_ANGLE_MODE ; main loop shadebob_main ; compute X coordinate ; sinus1=INT(amplitude1*SIN(angle1))+320 ; angle1=angle1+step1 ld hl,math_var_sinus1 push hl ld de,math_var_angle1 call _REAL_MOVE call _REAL_SINE pop hl ld de,math_var_amplitude1 call _REAL_MULTIPLICATION call _REAL_INT ld hl,320 ld de,(math_var_sinus1) call shadebob_coordinify push hl ; angle+=step ld hl,math_var_angle1 ld de,math_var_angle1_step call _REAL_ADDITION ; compute Y coordinate ; sinus2=INT(amplitude2*SIN(angle2))+200 ; angle2=angle2+step2 ld hl,math_var_sinus2 push hl ld de,math_var_angle2 call _REAL_MOVE call _REAL_SINE pop hl ld de,math_var_amplitude2 call _REAL_MULTIPLICATION call _REAL_INT ld hl,200 ld de,(math_var_sinus2) call shadebob_coordinify push hl ; angle+=step ld hl,math_var_angle2 ld de,math_var_angle2_step call _REAL_ADDITION ; plot the shadebob pop hl pop de ld ix,shadebob_data_sprite ld b,9 shadebob_plot_bob_mainloop push de ld c,(ix+0) inc ix shadebob_plot_bob_pixelloop sla c jr z,shadebob_plot_bob_nextline call c,shadebob_plot_pixel inc de inc de inc de inc de jr shadebob_plot_bob_pixelloop shadebob_plot_bob_nextline call c,shadebob_plot_pixel pop de inc hl inc hl djnz shadebob_plot_bob_mainloop jp shadebob_main math_var_angle1 db 0,0,0,0,0 math_var_angle1_step db 154,153,153,9,132 math_var_amplitude1 db 0,0,0,122,136 math_var_sinus1 db 0,0,0,0,0 math_var_angle2 db 0,0,0,0,0 math_var_angle2_step db 133,235,81,8,131 math_var_amplitude2 db 0,0,0,72,136 math_var_sinus2 db 0,0,0,0,0 shadebob_coordinify: bit 7,b jr z,shadebob_coordpos sbc hl,de ret shadebob_coordpos add hl,de ret shadebob_plot_pixel: push bc push de push hl push de push hl call _GRA_TEST_ABSOLUTE inc a call _GRA_SET_PEN pop hl pop de call _GRA_PLOT_ABSOLUTE pop hl pop de pop bc ret shadebob_data_sprite db %01110000 db %01110000 db %11111000 db %11111000 db %11111000 db %11111000 db %11111000 db %01110000 db %01110000 shadebob_data_palette db 1,2,5,11,14,20,23,26 db 25,24,16,15,6,4,3,0