123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805 |
- **** Man this code is ROUGH!!!!!
- section maptool,code_c
- opt NODEBUG
- opt p=68000
- opt c-
-
- incdir "tools:devpac/include"
- include "exec/exec_lib.i"
- include "exec/exec.i"
- include "libraries/dosextens.i"
-
- incdir "code:maptool/"
- include "glens_code/equates.s"
- STARTOFMAINCODE
- movem.l d0/a0,-(sp)
-
- sub.l a1,a1
- move.l 4.w,a6
- jsr _LVOFindTask(a6)
- move.l d0,a4
- tst.l pr_CLI(a4) ; was it called from CLI?
- bne.s fromCLI ; if so, skip out this bit...
- lea pr_MsgPort(a4),a0
- move.l 4.w,a6
- jsr _LVOWaitPort(A6)
- lea pr_MsgPort(a4),a0
- jsr _LVOGetMsg(A6)
- move.l d0,returnMsg
-
- fromCLI
- movem.l (sp)+,d0/a0
- bsr setup
- cmp.w #0,error_flag
- bne quit_prog
-
- move.l $6c,oldint
- move.l #interrupt,$6c
-
- crap
- move.l #$dff000,a6
- jsr setup_button_list ;required for buttons to work
-
- move.l #top_level_list,a0
- jsr display_button_list
- bsr Calculate_Blocks_In_One_Page
- bsr display_info_window
-
- bsr mainroutine
- bsr winddown
- quit_prog
- tst.l returnMsg ; Is there a message?
- beq.s exitToDOS ; if not, skip...
- move.l 4.w,a6
- jsr _LVOForbid(a6) ; note! No Permit needed!
- move.l returnMsg(pc),a1
- jsr _LVOReplyMsg(a6)
- exitToDOS
- rts
- returnMsg dc.l 0
- **********************************
- *** INTERRUPT ****
- **********************************
- interrupt
- movem.l d0-d7/a0-a6,-(sp)
-
- jsr position_cursor
- bsr readmouse
- bsr position_box_sprite
- bsr display_helpful_cursor
- tst.w pressed
- bne.s wait_for_frelease
- btst.b #7,$bfe001
- bne.s dont_switch
- move.w #1,pressed
- bsr switch_screens
- bra.s dont_switch
- wait_for_frelease
- btst.b #7,$bfe001
- beq.s dont_switch
- clr.w pressed
- dont_switch
- movem.l (sp)+,d0-d7/a0-a6
- dc.w $4ef9
- oldint dc.l 0
- pressed dc.w 0
- ***********************************************
- ***** MAINROUTINE *****
- ***********************************************
- mainroutine
- tst.w WorkBench_Mode
- bne.s Skip_Extras
- bsr sync
- bsr button_handler
- tst.w window_count
- bne.s skip_extras
- bsr get_stick_readings
- bsr Display_X_Y
- jsr Display_Alien_Name
- bsr Read_keys
- Skip_Extras
- tst.b quit_system
- beq.s mainroutine
- rts
-
- ***********************************************
- ***** SYNC *****
- **********************************************
- sync
- move.w #$0010,intreq(a6)
- sc_sync
- btst #4,intreqr+1(a6)
- beq.s sc_sync
- rts
- ***********************************************
- ***** BUTTON HANDLER *****
- ***********************************************
- button_handler
- jsr check_for_call_routine
- jsr check_to_see_hit
- jsr frig_for_editor
- jsr delete_buttons
- jsr draw_buttons
- rts
-
- ***********************************************
- ***** FRIG FOR EDITOR *****
- ***********************************************
- frig_for_editor
- ***routine that breaks rules but is neccessary for
- ***editor system
- btst #10,$dff016 ;mouse button
- bne.s right_not_hit
- cmp.w #1,edit_data_flag
- bne.s check_other_flag
- jsr remove_alien_data
- bra right_not_hit_by_user
- check_other_flag
- cmp.w #1,edit_mode
- bne.s check_graphic
- bsr delete_map_block
- rts
- check_graphic
- cmp.w #2,edit_mode
- bne.s right_not_hit_by_user
- bsr cancel_block_ops
- rts
- right_not_hit
- move.w #0,right_first
- right_not_hit_by_user
- rts
-
-
-
- *****************************************************************
- *Module Name :setup *
- *Function :sets up screen,allocates mem *
- *****************************************************************
- setup
- bsr open_dos
- bsr open_graphics_library
- tst.l d0
- beq error_with_allocation
- move.l #main_screen_struct,a0
- jsr setup_screen_memory
- move.l screen_mem(a0),d0
-
- tst.l d0
- bne allocated_screen_mem
- bra error_with_allocation
- ; otherwise quit
- allocated_screen_mem
- bsr allocate_picstruct_mem
- tst.l d0
- beq error_with_allocation
-
- bsr allocate_map_mem
- tst.l d0
- beq error_with_allocation
-
- bsr allocate_block_data_mem
- tst.l d0
- beq error_with_allocation
- move.l #button_window_struct,a0
- jsr setup_screen_memory
- move.l screen_mem(a0),d0
-
- tst.l d0
- bne allocated_window_mem
- move.l #main_screen_struct,a0 ;give back screen mem
- jsr deallocate_screen_memory
- bra error_with_allocation
- allocated_window_mem
- bsr put_planes_in_copper
-
- bsr Wait_For_Decent_Pos
- LEA CUSTOM,A0
- move.l #Copperl,d0
- move.w d0,coplo
- swap d0
- move.w d0,cophi
- swap d0
-
- MOVE.L d0,COP1LCH(A0)
-
- MOVE.W COPJMP1(A0),D0
-
-
- move.l #button_window_struct,a0
- move.l screen_mem(a0),d0
- moveq #0,d1
- move.w screen_x_size(a0),d1
- asr.w #3,d1
- mulu screen_y_size(a0),d1
- MOVE.W D0,BUTTONPLANELOW
- SWAP D0
- MOVE.W D0,BUTTONPLANEHIGH
- swap d0
-
- add.l d1,d0
- MOVE.W D0,BUTTONPLANE2LOW
- SWAP D0
- MOVE.W D0,BUTTONPLANE2HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,BUTTONPLANE3LOW
- SWAP D0
- MOVE.W D0,BUTTONPLANE3HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,BUTTONPLANE4LOW
- SWAP D0
- MOVE.W D0,BUTTONPLANE4HIGH
-
- bsr blank_sprites
- bsr setup_colours
- bsr low_pas_filter_off
-
- ifd hard_only
- move.l exec,a6
- jsr forbid(a6)
- endc
- rts
- error_with_allocation
- move.w #1,error_flag
- rts
- **********************************
- **** OPEN GRAPHICS LIBRARY ****
- **********************************
- open_graphics_library
- move.l exec,a6
- MOVE.L #graf_name,A1
- jsr -408(A6) ; OPEN GRAPHICS LIBRARY
- MOVE.L D0,graphics_lib_ptr
- rts
- **********************************
- *** LOW PAS FILTER OFF ****
- **********************************
- low_pas_filter_off
- bset #1,$bfe001
- rts
- **********************************
- *** ALLOCATE MAP MEM ****
- **********************************
- allocate_map_mem
- move.l #map_details,a0
- bsr Get_Map_Resources
-
- move.l #map_details2,a0 ;buffer map
- bsr Get_Map_Resources
- rts
- MAX_DATA_BLOCKS EQU 320*4
- MAX_BLOCKS_MEM EQU MAX_DATA_BLOCKS*2
- **********************************
- *** ALLOCATE BLOCK DATA MEM ****
- **********************************
- allocate_block_data_mem
- move.l #MEM_FAST+MEM_CLEAR,d1
- move.l exec,a6
- move.l #MAX_BLOCKS_MEM,d0
- jsr allocmem(a6) ;get mem
- tst.l d0
- bne.s got_block_data_mem
- move.l #0,d0
- rts
- got_block_data_mem
- move.l d0,block_data_ptr
- rts
- **********************************
- *** DEALLOCATE BLOCK DATA MEM****
- **********************************
- deallocate_block_data_mem
- move.l exec,a6
- move.l block_data_ptr,a1
- move.l #MAX_BLOCKS_MEM,d0
- jsr freemem(a6) ;free mem
- rts
- block_data_ptr
- dc.l 0
- **********************************
- *** GET MAP RESOURCES ****
- **********************************
- Get_Map_Resources
- move.w map_xsize(a0),d0
- mulu map_ysize(a0),d0
- tst map_datasize(a0)
- beq.s albyte_map
- asl.l d0 ;mulu again by 2 for word map
- albyte_map
- move.l #MEM_FAST+MEM_CLEAR,d1
- movem.l d7/a6/a0,-(sp)
- move.l 4,a6
- jsr -198(a6) ;get mem
- movem.l (sp)+,d7/a6/a0
- tst.l d0
- bne.s al_new_map_mem
- *raise error
- move.l #0,d0
- bra end_map_al
- al_new_map_mem
- move.l d0,map_mem(a0)
- *alocate alien map mem
- move.w map_xsize(a0),d0
- mulu map_ysize(a0),d0
- move.l #MEM_FAST+MEM_CLEAR,d1
- movem.l d7/a6/a0,-(sp)
- move.l 4,a6
- jsr -198(a6) ;get mem
- movem.l (sp)+,d7/a6/a0
- tst.l d0
- bne.s al_new_al_map_mem
- *raise error
- move.l #0,d0
- bra end_map_al
- al_new_al_map_mem
- move.l d0,map_alien_mem(a0)
- move.w map_datasize(a0),map_allocdatasize(a0)
- move.w map_xsize(a0),map_allocx(a0)
- move.w map_ysize(a0),map_allocy(a0)
- end_map_al
- rts
- **********************************
- *** DEALLOCATE MAP MEM ****
- **********************************
- Deallocate_Map_Mem
- move.l #Map_Details,a0
- bsr Free_Mem_Resources
-
- move.l #Map_Details2,a0
- bsr Free_Mem_Resources
- rts
- **********************************
- *** FREE MEM RESOURCES ****
- **********************************
- Free_Mem_Resources
- move.l exec,a6
- move.l map_mem(a0),a1
- move.w map_xsize(a0),d0
- mulu map_ysize(a0),d0
- move.w map_datasize(a0),d1
- lsl.l d1,d0 ;mulu by data size (0=byte)
- move.l a0,-(sp)
- jsr freemem(a6)
- move.l (sp)+,a0
- move.l exec,a6
- move.l map_alien_mem(a0),a1
- move.w map_xsize(a0),d0
- mulu map_ysize(a0),d0
- jsr freemem(a6)
- rts
- **********************************
- *** ALLOCATE PICSTRUCT MEM ****
- **********************************
- allocate_picstruct_mem
- movem.l a6,-(sp)
-
- move.l #main_screen_struct,a1
- move.w screen_x_size(a1),d3
- asr.w #3,d3
- mulu screen_y_size(a1),d3
- mulu number_of_planes(a1),d3
-
- move.l #picture_pages,a0
- moveq #3,d2
- allocate_piccy_mem
- move.l #MEM_FAST+MEM_CLEAR,d1
- move.l 4,a6
- move.l d3,d0
- movem.l d2-d3/a0-a1,-(sp)
- jsr -198(a6)
- movem.l (sp)+,d2-d3/a0-a1
- tst.l d0
- beq.s pa_exit_with_error
- move.l (a0),a1
- move.l #main_screen_struct,a2
- move.l d0,screen_mem(a1)
- move.w number_of_planes(a2),number_of_planes(a1)
- move.w screen_x_size(a2),screen_x_size(a1)
- move.w screen_y_size(a2),screen_y_size(a1)
-
- addq.l #4,a0 ;next struct
- dbra d2,allocate_piccy_mem
- moveq #1,d0
- pa_exit_with_error
- movem.l (sp)+,a6
- rts
- **********************************
- *** DEALLOCATE PICSTRUCT MEM ****
- **********************************
- deallocate_picstruct_mem
- movem.l a6,-(sp)
- move.l #picture_pages,a0
- moveq #3,d2
- deallocate_piccy_mem
- move.l (a0),a1
- move.l screen_mem(a1),a1
- move.l #main_screen_struct,a2
- move.w screen_x_size(a2),d0
- asr.w #3,d0
- mulu screen_y_size(a2),d0
- mulu number_of_planes(a2),d0
- move.l 4,a6
- movem.l d2/a0,-(sp)
- jsr -210(a6)
- movem.l (sp)+,d2/a0
- addq.l #4,a0 ;next struct
- dbra d2,deallocate_piccy_mem
- movem.l (sp)+,a6
- rts
- **********************************
- *** PUT PLANES IN COPPER ****
- **********************************
- put_planes_in_copper
- move.l #main_screen_struct,a0
- move.w screen_x_size(a0),d1
- asr.w #3,d1
- mulu screen_y_size(a0),d1
- move.l screen_mem(a0),d0
- MOVE.W D0,PLANELOW
- SWAP D0
- MOVE.W D0,PLANEHIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE2LOW
- SWAP D0
- MOVE.W D0,PLANE2HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE3LOW
- SWAP D0
- MOVE.W D0,PLANE3HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE4LOW
- SWAP D0
- MOVE.W D0,PLANE4HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE5LOW
- SWAP D0
- MOVE.W D0,PLANE5HIGH
-
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE6LOW
- SWAP D0
- MOVE.W D0,PLANE6HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE7LOW
- SWAP D0
- MOVE.W D0,PLANE7HIGH
- swap d0
- add.l d1,d0
- MOVE.W D0,PLANE8LOW
- SWAP D0
- MOVE.W D0,PLANE8HIGH
-
- rts
- **********************************
- *** SETUP COLOURS ****
- **********************************
-
- setup_colours
- move.l #main_screen_colour_map,a1
- bsr setup_screen_colours
- bsr setup_button_colours
- rts
- **********************************
- *** SETUP_SCREEN_COLOURS ****
- **********************************
-
- setup_screen_colours
- ***send colour map in a1
- move.l #main_screen_colours+2,a3
- move.w #2-1,d2
- set_hi_lo
- move.w #8-1,d1
- load_banks
- move.w #32-1,d0
- fill_scr_colours
- move.w (a1)+,(a3)
- add.l #4,a3
- dbra d0,fill_scr_colours
- add.l #4,a3 ;skip bank
- dbra d1,load_banks
- dbra d2,set_hi_lo
- rts
- **********************************
- *** SETUP_GREY_COLOURS ****
- **********************************
-
- setup_grey_colours
- move.l #main_screen_colours+2,a3
- move.l #grey_colour_map,a1
- move.w #16-1,d0
- fill_gscr_colours
- move.w (a1)+,(a3)
- add.l #4,a3
- dbra d0,fill_gscr_colours
- rts
- **********************************
- *** SETUP BUTTON COLOURS ****
- **********************************
- setup_button_colours
- move.l #button_colours+2,a3
- move.l #button_colour_map,a1
- move.w #16-1,d0
- fill_butt_colours
- move.w (a1)+,(a3)
- add.l #4,a3
- dbra d0,fill_butt_colours
- rts
- *****************************************************************
- *Module Name :winddown *
- *Function :deallocates mem, exits to system *
- *****************************************************************
- winddown
- move.l oldint,$6c
- bsr deallocate_map_mem
- bsr deallocate_block_data_mem
- bsr deallocate_picstruct_mem
- move.l #main_screen_struct,a0
- jsr deallocate_screen_memory
- move.l #button_window_struct,a0
- jsr deallocate_screen_memory
- bsr return_workbench_screen
-
- MOVE.W #$8030,$DFF096 ; ENABLE SPRITES
- move.w #$f,$dff096 ; turn off audio
- ifd hard_only
- move.l 4,a6
- jsr permit(a6)
- endc
- RTS
- **********************************
- *** RETURN WORKBENCH SCREEN ****
- **********************************
- Return_Workbench_Screen
- move.l 4,a6
- jsr permit(a6)
- move.l graphics_lib_ptr,a4
- MOVE.L #$DFF000,A6
- MOVE.L 38(A4),COP1LCH(A6) ; GET SYSTEM COPPER
- CLR.W COPJMP1(A6)
- rts
- **********************************
- *** SWITCH SCREENS ***
- **********************************
- Switch_Screens
- tst.w Workbench_Mode
- beq.s switch_workbench
- bsr Wait_For_Decent_Pos
- bsr Switch_Back_To_Main
- rts
-
- **********************************
- *** WAIT FOR DECENT POS ****
- **********************************
- Wait_For_Decent_Pos
- move.w vhposr+$dff000,d0
- andi.w #$ff00,d0
- cmp.w #$4000,d0
- bne.s Wait_For_Decent_Pos
- rts
- **********************************
- *** SWITCH WORKBENCH ****
- **********************************
- Switch_Workbench
- move.w #1,WorkBench_Mode
- bsr return_workbench_screen
- rts
- **********************************
- *** SWITCH BACK TO MAIN ****
- **********************************
- Switch_Back_To_Main
- move.l 4,a6
- jsr forbid(a6)
- move.l #$dff000,a6
- MOVE.L #COPPERL,COP1LCH(A6)
- clr.w COPJMP1(A6)
- clr.w WorkBench_Mode
- rts
- **********************************
- *** KILL SYSTEM ****
- **********************************
- kill_system
- move.l #top_level_list,a0
- jsr remove_button_list
- move.b #1,quit_system
- rts
- change_colour
- move.w #$fff,$dff180
- rts
-
- include "glens_code/input_routines.s"
- include "glens_code/info_routines.s"
- include "glens_code/key_handler.s"
- include "glens_code/text_routines.s"
- include "glens_code/darkline.s"
- include "glens_code/hex_screen_routines.s"
- include "stus_code/FileIO.s"
- include "glens_code/window_routines.s"
- include "glens_code/screen_routines.s"
- include "glens_code/button_routines.s"
- include "glens_code/iffroutinebk.s"
- include "glens_code/cursor_routines.s"
- include "glens_code/hex_data.s"
- include "glens_code/button_data.s"
- include "glens_code/graphic_routines.s"
- include "glens_code/mapsetup.s"
- include "glens_code/map_routines_buttons.s"
- include "glens_code/map_routines.s"
- include "glens_code/palette_setup.s"
- include "glens_code/fill_routines.s"
- include "glens_code/check_routines.s"
- include "glens_code/savepic_setup.s"
- include "glens_code/save_routines.s"
- include "glens_code/buffer_routines.s"
- include "glens_code/alien_data.s"
- include "stus_code/FileIO_DATA.s"
- include "glens_code/buffer_setup.s"
- include "glens_code/show_whole_map.s"
- include "glens_code/project_code.s"
- include "glens_code/keyboard_reader.s"
- include "glens_code/block_data_manip.s"
-
- blank dc.w 0
- include "data/copper_list.s"
- include "data/custom_buttons.s"
- include "data/buttongraphics.s"
- include "data/cursor_graphics.s"
- small_numbers
- incbin "data/nums.bin"
- EVEN
- section maptool,data
- include "data/picinfo.s"
- *******SCREEN SETUPS
-
- main_screen_struct
- dc.w 320
- dc.w 256
- dc.w 0,0
- dc.l 0
- main_screen_planes
- dc.w 8
- button_window_struct
- dc.w 640
- dc.w 4*BUTTON_HEIGHT
- dc.w 0,0
- dc.l 0
- button_window_planes
- dc.w 4
- quit_system
- dc.b 0
- EVEN
- Workbench_Mode
- dc.w 0
-
- graf_name dc.b "graphics.library",0
- EVEN
- graphics_lib_ptr
- dc.l 0
- error_flag dc.w 0
- screen_pointer dc.l 0
- backscr1 Dc.l 0
- backscr2 Dc.l 0
- backscr3 Dc.l 0
- backscr4 Dc.l 0
-
- fill_stack
- ds.w (40*40)*2
|