home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / boot / orpsw.lha / Orpsw / orpsw.s < prev   
Text File  |  1992-09-02  |  35KB  |  1,003 lines

  1. *****************************************************************************
  2. *         SECURITY CONTROL                                                  *
  3. * Compiler: Devpac 3.04                                              ORHAN  *
  4. *****************************************************************************
  5.           MACHINE      MC68000
  6.           INCLUDE      "exec/types.i"
  7.           INCLUDE      "exec/memory.i"
  8.           INCLUDE      "exec/execbase.i"
  9.           INCLUDE      "exec/io.i"
  10.           INCLUDE      "exec/resident.i"
  11.           INCLUDE      "exec/tasks.i"
  12.           INCLUDE      "graphics/gfxbase.i"
  13.           INCLUDE      "graphics/rastport.i"
  14.           INCLUDE      "graphics/modeid.i"
  15.           INCLUDE      "graphics/text.i"
  16.           INCLUDE      "graphics/view.i"
  17.           INCLUDE      "hardware/custom.i"
  18.           INCLUDE      "hardware/dmabits.i"
  19.           INCLUDE      "hardware/intbits.i"
  20.           INCLUDE      "dos/dosextens.i"
  21.           INCLUDE      "devices/input.i"
  22.           INCLUDE      "devices/inputevent.i"
  23.           INCLUDE      "devices/trackdisk.i"
  24.           INCLUDE      "lvo/exec_lib.i"
  25.           INCLUDE      "lvo/dos_lib.i"
  26.           INCLUDE      "lvo/graphics_lib.i"
  27.           INCLUDE      "lvo/keymap_lib.i"
  28.           INCLUDE      "lvo/utility_lib.i"
  29. *****************************************************************************
  30. *         check from cli or boot time                                       *
  31. *****************************************************************************
  32.           SECTION      "CODE",CODE_C
  33.           MOVE.L       ($4),A6
  34.           LEA.L        CONNAME,A1
  35.           CALLSYS      FindTask
  36.           TST.L        D0
  37.           BEQ          START
  38.  
  39.           LEA.L        SEMANAME,A1
  40.           CALLSYS      FindSemaphore
  41.           MOVE.L       D0,SEMADR
  42.           BEQ          EXIT
  43.  
  44.           MOVE.L       SEMADR,A1
  45.           LEA.L        RETCODE-MYSEMAFOR(A1),A0
  46.           MOVE.L       (A0),D2
  47.  
  48.           MOVE.L       SEMADR,A1
  49.           CALLSYS      RemSemaphore
  50.  
  51.           MOVE.L       D2,D0
  52.           RTS
  53. *****************************************************************************
  54. *         creat task                                                        *
  55. *****************************************************************************
  56. START:
  57.           CMP.W        #36,LIB_VERSION(A6)
  58.           BLO          ADDFS                     ;check KS2.0+
  59.  
  60.           LEA.L        STARTFLAG,A0              ;check first call
  61.           TST.L        (A0)
  62.           BNE          ADDFS
  63.           NOT.L        (A0)
  64. *****************************************************************************
  65. *         stop floppy drives clicks                                         *
  66. *****************************************************************************
  67.           CALLSYS      CreateMsgPort
  68.           MOVE.L       D0,TRACKPORT
  69.           BEQ          CREATETASK
  70.           MOVE.L       D0,A0
  71.           MOVE.L       #IOSTD_SIZE,D0
  72.           CALLSYS      CreateIORequest
  73.           MOVE.L       D0,TRACKREQ
  74.           BEQ          CREATETASK
  75.  
  76.           MOVE.L       #NUMUNITS-1,D6
  77. AA12:
  78.           LEA.L        TRACKNAME,A0
  79.           MOVE.L       D6,D0        
  80.           MOVE.L       TRACKREQ,A1
  81.           MOVE.L       #0,D1
  82.           CALLSYS      OpenDevice   
  83.           TST.L        D0
  84.           BNE          AA13
  85.  
  86.           MOVE.L       TRACKREQ,A1
  87.           MOVE.L       IO_UNIT(A1),A2
  88.           BSET.B       #TDPB_NOCLICK,TDU_PUBFLAGS(A2)
  89. AA13:     DBF          D6,AA12
  90.                                                 ;dont close device
  91.           MOVE.L       TRACKREQ,A0
  92.           CALLSYS      DeleteIORequest
  93.           MOVE.L       TRACKPORT,A0
  94.           CALLSYS      DeleteMsgPort
  95. *****************************************************************************
  96. *         creat task                                                        *
  97. *****************************************************************************
  98. CREATETASK:
  99.           MOVE.L       ThisTask(A6),MYTASK
  100.           MOVE.L       #-1,D0
  101.           CALLSYS      AllocSignal
  102.           MOVE.L       D0,SIGBIT
  103.           BMI          ADDFS
  104.  
  105.           LEA.L        THEMEMLIST,A0
  106.           CALLSYS      AllocEntry
  107.           BCLR.L       #31,D0
  108.           BNE          ADDFS
  109.           MOVE.L       D0,A1                       ;new memlist
  110.           LEA.L        THETASK,A0
  111.           MOVE.L       ML_ME+ME_ADDR(A1),D0
  112.           MOVE.L       ML_ME+ME_LENGTH(A1),D1
  113.           MOVE.L       #0,LN_NAME(A0)
  114.           MOVE.B       #0,LN_PRI(A0)
  115.           MOVE.B       #NT_TASK,LN_TYPE(A0)
  116.           MOVE.L       D0,TC_SPLOWER(A0)
  117.           ADD.L        D1,D0
  118.           MOVE.L       D0,TC_SPUPPER(A0)
  119.           MOVE.L       TC_SPUPPER(A0),TC_SPREG(A0)
  120.           LEA.L        TC_MEMENTRY(A0),A0
  121.           NEWLIST      A0
  122.           ADDHEAD
  123.  
  124.           LEA.L        THETASK,A1
  125.           LEA.L        CREATVIEW,A2
  126.           MOVE.L       #0,A3
  127.           CALLSYS      AddTask
  128.  
  129.           MOVE.L       SIGBIT,D1
  130.           CLR.L        D0
  131.           BSET.L       D1,D0
  132.           CALLSYS      Wait
  133.  
  134.           MOVE.L       SIGBIT,D0
  135.           CALLSYS      FreeSignal
  136. *****************************************************************************
  137. *         add '*' wildcard character to DOS                                 *
  138. *****************************************************************************
  139.           LEA.L        LibList(A6),A0
  140.           LEA.L        DOSNAME,A1
  141.           CALLSYS      FindName                 ;get DosBase 
  142.           TST.L        D0 
  143.           BEQ          ADDFS
  144.  
  145.           MOVE.L       D0,A1
  146.           MOVE.L       dl_Root(A1),A0
  147.           OR.L         #RNF_WILDSTAR,rn_Flags(A0)
  148.       OR.B         #LIBF_CHANGED,LIB_FLAGS(A1)
  149. *****************************************************************************
  150. *         add standard file systems                                         *
  151. *****************************************************************************
  152. ADDFS:
  153.           LEA.L        FSNAME,A1
  154.           CALLSYS      FindResident
  155.           TST.L        D0
  156.           BEQ          EXIT
  157.           MOVE.L       D0,A1
  158.           CLR.L        D1
  159.           CALLSYS      InitResident
  160. *****************************************************************************
  161. *         exit                                                              *
  162. *****************************************************************************
  163. EXIT:
  164.           MOVE.L       #0,D0
  165.           RTS
  166. *****************************************************************************
  167. *         creat view  (task)                                                *
  168. *****************************************************************************
  169. CREATVIEW:
  170.           MOVE.L       ($4),A6
  171.           MOVE.W       $DFF000+dmaconr.L,D0
  172.           OR.W         #BITSET,D0
  173.           MOVE.W       D0,SAVEDMA
  174.  
  175.           CALLSYS      CreateMsgPort
  176.           MOVE.L       D0,INPUTPORT
  177.           BEQ          CLEANGFX
  178.           MOVE.L       D0,A0
  179.           MOVE.L       #IOSTD_SIZE,D0
  180.           CALLSYS      CreateIORequest
  181.           MOVE.L       D0,INPUTREQ
  182.           BEQ          CLEANGFX
  183.  
  184.           LEA.L        INPUTNAME,A0
  185.           MOVE.L       INPUTREQ,A1
  186.           MOVE.L       #0,D0
  187.           MOVE.L       #0,D1
  188.           CALLSYS      OpenDevice
  189.           TST.L        D0
  190.           BNE          CLEANGFX
  191.           NOT.L        OPENSTATUSI
  192.  
  193.           LEA.L        INPUTHAND,A0
  194.           MOVE.B       #127,LN_PRI(A0)
  195.           LEA.L        EVENTFLAG,A1
  196.           MOVE.L       A1,IS_DATA(A0)
  197.           LEA.L        INPUTHANDLER,A1
  198.           MOVE.L       A1,IS_CODE(A0)
  199.  
  200.           MOVE.L       INPUTREQ,A1
  201.           LEA.L        INPUTHAND,A0
  202.           MOVE.L       A0,IO_DATA(A1)
  203.           MOVE.W       #IND_ADDHANDLER,IO_COMMAND(A1)
  204.           CALLSYS      DoIO                     ;add input handler
  205.  
  206.           LEA.L        KEYMAPNAME,A1
  207.           CLR.L        D0
  208.           CALLSYS      OpenLibrary    
  209.           MOVE.L       D0,KEYMAPBASE
  210.           BEQ          CLEANGFX
  211.  
  212.           LEA.L        UTILNAME,A1
  213.           CLR.L        D0
  214.           CALLSYS      OpenLibrary
  215.           MOVE.L       D0,UTILBASE
  216.           BEQ          CLEANGFX
  217.  
  218.           LEA.L        GFXNAME,A1
  219.           CLR.L        D0
  220.           CALLSYS      OpenLibrary
  221.           MOVE.L       D0,GFXBASE
  222.           BEQ          CLEANGFX
  223. *****************************************************************************
  224. *         display view                                                      *
  225. *****************************************************************************
  226.           MOVE.L       GFXBASE,A6
  227.           MOVE.L       gb_ActiView(A6),D0
  228.           MOVE.L       D0,OLDVIEW                   ;save current View
  229.  
  230.           LEA.L        THEVIEW,A1
  231.           CALLSYS      InitView
  232.           LEA.L        THEVIEW,A0
  233.           OR.W         #V_LACE,v_Modes(A0)
  234.  
  235.           LEA.L        THEVPORT,A0
  236.           CALLSYS      InitVPort
  237.  
  238.           LEA.L        THEVPORT,A1 
  239.           LEA.L        THERASINFO,A0
  240.           MOVE.L       A0,vp_RasInfo(A1)
  241.           MOVE.W       #WIDTH,vp_DWidth(A1)
  242.           MOVE.W       #HEIGHT,vp_DHeight(A1)
  243.           ADD.W        #(256-HEIGHT)/2,vp_DyOffset(A1)     
  244.                                                          
  245.           SUB.W        #90,vp_DxOffset(A1)        ;for VGA       
  246.           OR.W         #HIRES_KEY,vp_Modes(A1)    ;monitor       
  247. ;;        SUB.W        #26,vp_DxOffset(A1)        ;for PAL       
  248. ;;        OR.W         #LORES_KEY,vp_Modes(A1)    ;monitor       
  249.  
  250.           LEA.L        THEVIEW,A0
  251.           LEA.L        THEVPORT,A1
  252.           MOVE.L       A1,v_ViewPort(A0)
  253.  
  254.           LEA.L        THEBITMAP,A0
  255.           MOVE.L       #DEPTH,D0
  256.           MOVE.L       #WIDTH,D1
  257.           MOVE.L       #HEIGHT,D2
  258.           CALLSYS      InitBitMap
  259.  
  260.           LEA.L        THEBITMAP+bm_Planes,A0       ;clear plane pointers
  261.           MOVE.W       #8-1,D2
  262. CLR1:     CLR.L        (A0)+
  263.           DBF          D2,CLR1
  264.  
  265.           LEA.L        THERASINFO,A0                ;set RasInfo
  266.           LEA.L        THEBITMAP,A1
  267.           MOVE.L       A1,ri_BitMap(A0)
  268.           MOVE.W       #0,ri_RxOffset(A0)
  269.           MOVE.W       #0,ri_RyOffset(A0)
  270.           MOVE.L       #0,ri_Next(A0)
  271.  
  272.           LEA.L        THERASTPORT,A1
  273.           CALLSYS      InitRastPort
  274.           LEA.L        THERASTPORT,A1
  275.           LEA.L        THEBITMAP,A0
  276.           MOVE.L       A0,rp_BitMap(A1)
  277.  
  278.           MOVE.L       #(RAW_DATA-COLORMAP)/2,D0    ;number of colors
  279.           CALLSYS      GetColorMap                  ;initialize ColorMap
  280.           LEA.L        THEVPORT+vp_ColorMap,A0
  281.           MOVE.L       D0,(A0)
  282.           BEQ          CLEANGFX
  283.  
  284.           LEA.L        THEVPORT,A0
  285.           LEA.L        COLORMAP,A1
  286.           MOVE.L       #(RAW_DATA-COLORMAP)/2,D0    ;number of colors
  287.           CALLSYS      LoadRGB4                     ;change colors in table
  288.  
  289.           MOVE.W       THEBITMAP+bm_BytesPerRow,D6
  290.           MULU.W       THEBITMAP+bm_Rows,D6         ;calculate Raster size
  291.           LEA.L        RAW_DATA,A0
  292.           LEA.L        THEBITMAP+bm_Planes,A1
  293.           MOVE.W       #DEPTH-1,D5
  294. ALL1:     MOVE.L       A0,(A1)+
  295.           ADD.L        D6,A0
  296.           DBF          D5,ALL1
  297. *****************************************************************************
  298. *         sort and merge copper lists                                       *
  299. *****************************************************************************
  300.           LEA.L        THEVIEW,A0
  301.           LEA.L        THEVPORT,A1
  302.           CALLSYS      MakeVPort       ;construct preliminary Copper list
  303.  
  304.           LEA.L        THEVIEW,A1
  305.           CALLSYS      MrgCop          ;merge lists into a real list
  306. *****************************************************************************
  307. *         set font                                                          *
  308. *****************************************************************************
  309.           LEA.L        TEXTATTR,A0                 ;initialize text attr
  310.           LEA.L        FONTNAME,A1
  311.           MOVE.L       A1,ta_Name(A0)
  312.           MOVE.W       #8,ta_YSize(A0)
  313.           MOVE.B       #FS_NORMAL,ta_Style(A0)
  314.           MOVE.B       #FPF_DESIGNED|FPF_ROMFONT,ta_Flags(A0)
  315.  
  316.           LEA.L        TEXTATTR,A0
  317.           CALLSYS      OpenFont
  318.           LEA.L        FONTTEXT,A0
  319.           MOVE.L       D0,(A0)
  320.           BEQ          CLEANGFX
  321.  
  322.           LEA.L        THERASTPORT,A1
  323.           MOVE.L       FONTTEXT,A0
  324.           CALLSYS      SetFont
  325.  
  326.           LEA.L        THERASTPORT,A1
  327.           MOVE.L       #RP_JAM2,D0
  328.           CALLSYS      SetDrMd
  329.  
  330.           LEA.L        THEVIEW,A1
  331.           CALLSYS      LoadView               ;display View
  332.           CALLSYS      WaitTOF
  333.           MOVE.W       #BITCLR|DMAF_SPRITE,($DFF000+dmacon)
  334.           MOVE.W       #BITSET|DMAF_MASTER|DMAF_RASTER|DMAF_COPPER,($DFF000+dmacon)
  335. *****************************************************************************
  336. *         check input string                                                *
  337. *****************************************************************************
  338. AA10:
  339.           MOVE.L       #100,D0
  340.           MOVE.L       #040,D1
  341.           MOVE.L       #8,D2
  342.           LEA.L        USERID,A0
  343.           MOVE.L       #'    ',0(A0)
  344.           MOVE.L       #'    ',4(A0)
  345.           BSR          GETSTRING
  346.  
  347.           MOVE.L       #1,RETCODE
  348.           LEA.L        USERID,A0
  349.           LEA.L        TEXT1,A1
  350.           MOVE.L       #8,D0
  351.           LINKSYS      Strnicmp,UTILBASE
  352.           TST.L        D0
  353.           BEQ          AA11
  354.  
  355.           LEA.L        USERID,A0
  356.           LEA.L        TEXT0,A1
  357.           MOVE.L       #8,D0
  358.           LINKSYS      Strnicmp,UTILBASE
  359.           TST.L        D0
  360.           BEQ          RESET1
  361.  
  362.           MOVE.L       #5,RETCODE
  363.           LEA.L        USERID,A0
  364.           LEA.L        TEXT2,A1
  365.           MOVE.L       #8,D0
  366.           LINKSYS      Strnicmp,UTILBASE
  367.           TST.L        D0
  368.           BNE          AA10
  369. AA11:
  370. *****************************************************************************
  371. *         write something to semaphore                                      *
  372. *****************************************************************************
  373.           MOVE.L       ($4),A6
  374.           MOVE.L       #LENSEMA,D0
  375.           MOVE.L       #MEMF_PUBLIC,D1
  376.           CALLSYS      AllocMem
  377.           MOVE.L       D0,SEMADR
  378.           BEQ          ERROR
  379.  
  380.           LEA.L        MYSEMAFOR,A0
  381.           MOVE.L       SEMADR,A1
  382.           MOVE.W       #LENSEMA-1,D0
  383. AA3:      MOVE.B       (A0)+,(A1)+
  384.           DBF          D0,AA3
  385.  
  386.           MOVE.L       SEMADR,A0
  387.           CALLSYS      InitSemaphore
  388.  
  389.           MOVE.L       SEMADR,A1
  390.           LEA.L        SEMANAME-MYSEMAFOR(A1),A0
  391.           MOVE.L       A0,LN_NAME(A1)
  392.           MOVE.B       #0,LN_PRI(A1)
  393.  
  394.           MOVE.L       SEMADR,A1
  395.           CALLSYS      AddSemaphore
  396.           BRA          CLEANGFX
  397. *****************************************************************************
  398. *         wait vertical blank                                               *
  399. *****************************************************************************
  400. WAITB:
  401.           MOVE.L       $DFF000+vposr.L,D0
  402.           LSR.L        #8,D0
  403.           AND.W        #$07FF,D0
  404.           CMP.W        #290,D0
  405.           BLO          WAITB
  406.           RTS
  407. *****************************************************************************
  408. *         clean up                                                          *
  409. *****************************************************************************
  410. CLEANGFX:
  411.           MOVE.W       #BITCLR|DMAF_RASTER|DMAF_COPPER,($DFF000+dmacon)
  412.           MOVE.W       SAVEDMA,($DFF000+dmacon)
  413.  
  414.           MOVE.L       GFXBASE,A6
  415.           MOVE.L       OLDVIEW,D0
  416.           BEQ          CLEAN1
  417.           MOVE.L       D0,gb_ActiView(A6)
  418.           MOVE.L       D0,A1
  419.           CALLSYS      LoadView               ;put back the old View
  420.           CALLSYS      WaitTOF
  421. CLEAN1:
  422.           MOVE.L       THEVPORT+vp_ColorMap,D0
  423.           BEQ          CLEAN2
  424.           MOVE.L       D0,A0
  425.           CALLSYS      FreeColorMap
  426. CLEAN2:
  427.           LEA.L        THEVPORT,A0
  428.           TST.L        vp_DspIns(A0)
  429.           BEQ          CLEAN33
  430.           CALLSYS      FreeVPortCopLists
  431. CLEAN33:
  432.           MOVE.L       THEVIEW+v_LOFCprList,D0
  433.           BEQ          CLEAN3
  434.           MOVE.L       D0,A0
  435.           CALLSYS      FreeCprList
  436. CLEAN3:
  437.           MOVE.L       THEVIEW+v_SHFCprList,D0
  438.           BEQ          CLEAN4
  439.           MOVE.L       D0,A0
  440.           CALLSYS      FreeCprList
  441. CLEAN4:
  442.           MOVE.L       FONTTEXT,D0
  443.           BEQ          CLEAN44
  444.           MOVE.L       D0,A1
  445.           CALLSYS      CloseFont
  446. CLEAN44:
  447.           MOVE.L       ($4),A6
  448.           MOVE.L       GFXBASE,D0
  449.           BEQ          CLEAN5
  450.           MOVE.L       D0,A1
  451.           CALLSYS      CloseLibrary
  452. CLEAN5:
  453.           MOVE.L       OPENSTATUSI,D0
  454.           BEQ          CLEAN6
  455.           MOVE.L       INPUTREQ,A1
  456.           LEA.L        INPUTHAND,A0
  457.           MOVE.L       A0,IO_DATA(A1)
  458.           MOVE.W       #IND_REMHANDLER,IO_COMMAND(A1)
  459.           CALLSYS      DoIO
  460.  
  461.           MOVE.L       INPUTREQ,A1
  462.           CALLSYS      CloseDevice
  463.  
  464.           MOVE.L       INPUTREQ,A0
  465.           CALLSYS      DeleteIORequest
  466.           MOVE.L       INPUTPORT,A0
  467.           CALLSYS      DeleteMsgPort
  468. CLEAN6:
  469.           MOVE.L       KEYMAPBASE,D0
  470.           BEQ          CLEAN7
  471.           MOVE.L       D0,A1
  472.           CALLSYS      CloseLibrary
  473. CLEAN7:
  474.           MOVE.L       UTILBASE,D0
  475.           BEQ          EXITCLEAN
  476.           MOVE.L       D0,A1
  477.           CALLSYS      CloseLibrary
  478. EXITCLEAN:
  479.           MOVE.L       SIGBIT,D1
  480.           CLR.L        D0
  481.           BSET.L       D1,D0
  482.           MOVE.L       MYTASK,A1
  483.           CALLSYS      Signal
  484.  
  485.           MOVE.L       #0,D0
  486.           RTS
  487. *****************************************************************************
  488. *         getstring function   D0=LocX, D1=LocY, D2=lenstr, A0=str          *
  489. *****************************************************************************
  490. GETSTRING:
  491.           MOVEM.L      D0-D7/A0-A6,-(SP)
  492.           LEA.L        LOCX,A1
  493.           MOVE.L       D0,(A1)
  494.           LEA.L        LOCY,A1
  495.           MOVE.L       D1,(A1)
  496.           LEA.L        LENSTR,A1
  497.           MOVE.L       D2,(A1)
  498.           LEA.L        STRADR,A1
  499.           MOVE.L       A0,(A1)
  500.           LEA.L        CURPOS,A1
  501.           CLR.L        (A1)
  502.           LEA.L        CHRPOS,A1
  503.           CLR.L        (A1)
  504.  
  505.           MOVE.L       STRADR,A0
  506.           LEA.L        STRING,A1
  507.           MOVE.L       LENSTR,D1
  508.           SUB.W        #1,D1
  509. CPY2:     MOVE.B       (A0)+,(A1)+
  510.           DBF          D1,CPY2
  511.           MOVE.B       #' ',(A1)
  512.  
  513. WAITKEY:
  514.           BSR          PUTSTRING
  515.           BSR          READKEY
  516.           CMP.L        #KEY_ENTER,KEYRAW
  517.           BEQ          KEYENTER
  518.           CMP.L        #KEY_DELETE,KEYRAW
  519.           BEQ          KEYDELETE
  520.           CMP.L        #KEY_BACKSPACE,KEYRAW
  521.           BEQ          KEYBACKSPACE
  522.           CMP.L        #KEY_LEFT,KEYRAW
  523.           BEQ          KEYLEFT
  524.           CMP.L        #KEY_RIGHT,KEYRAW
  525.           BEQ          KEYRIGHT
  526.           CMP.B        #32,KEYANSI
  527.           BLS          WAITKEY
  528.           CMP.B        #126,KEYANSI
  529.           BHI          WAITKEY
  530.           BRA          PUTCHAR
  531.  
  532. KEYENTER:
  533.           LEA.L        STRING,A0
  534.           MOVE.L       STRADR,A1
  535.           MOVE.L       LENSTR,D1
  536.           SUB.W        #1,D1
  537. CPY3:     MOVE.B       (A0)+,(A1)+
  538.           DBF          D1,CPY3
  539.           MOVE.B       #' ',(A1)
  540.           BRA          EXITSTRING
  541.  
  542. KEYDELETE:
  543.           MOVE.L       CURPOS,D0
  544.           CMP.L        LENSTR,D0
  545.           BGE          AA6
  546.  
  547.           LEA.L        STRING,A0
  548.           ADD.L        CURPOS,A0
  549.           MOVE.L       LENSTR,D0
  550.           SUB.L        CURPOS,D0
  551.           SUB.W        #1,D0
  552. CPY4:     MOVE.B       1(A0),(A0)+
  553.           DBF          D0,CPY4
  554. AA6:      BRA          WAITKEY
  555.  
  556. KEYBACKSPACE:
  557.           LEA.L        CURPOS,A0
  558.           TST.L        (A0)
  559.           BEQ          AA5
  560.           SUB.L        #1,(A0)
  561.  
  562.           LEA.L        STRING,A0
  563.           ADD.L        CURPOS,A0
  564.           MOVE.L       LENSTR,D0
  565.           SUB.L        CURPOS,D0
  566.           SUB.W        #1,D0
  567. CPY5:     MOVE.B       1(A0),(A0)+
  568.           DBF          D0,CPY5
  569. AA5:      BRA          WAITKEY
  570.  
  571. KEYLEFT:
  572.           LEA.L        CURPOS,A0
  573.           TST.L        (A0)
  574.           BEQ          AA7
  575.           SUB.L        #1,(A0)
  576. AA7:      BRA          WAITKEY
  577.  
  578. KEYRIGHT:
  579.           LEA.L        STRING,A0
  580.           ADD.L        CURPOS,A0
  581.           CMP.B        #' ',(A0)
  582.           BEQ          AA8
  583.           LEA.L        CURPOS,A0
  584.           MOVE.L       LENSTR,D0
  585.           CMP.L        (A0),D0
  586.           BLS          AA8
  587.           ADD.L        #1,(A0)
  588. AA8:      BRA          WAITKEY
  589.  
  590. PUTCHAR:
  591.           MOVE.L       CURPOS,D0
  592.           CMP.L        LENSTR,D0
  593.           BGE          DISPFLASH
  594.  
  595.           LEA.L        STRING,A0
  596.           ADD.L        LENSTR,A0
  597.           CMP.B        #' ',-1(A0)
  598.           BNE          DISPFLASH
  599.  
  600.           LEA.L        STRING,A0
  601.           MOVE.L       LENSTR,D0
  602. AA4:      SUB.L        #1,D0
  603.           MOVE.B       (A0,D0.L),1(A0,D0.L)
  604.           CMP.L        CURPOS,D0
  605.           BGT          AA4
  606.  
  607.           LEA.L        STRING,A0
  608.           ADD.L        LENSTR,A0
  609.           MOVE.B       #' ',(A0)
  610.  
  611.           LEA.L        STRING,A0
  612.           ADD.L        CURPOS,A0
  613.           MOVE.B       KEYANSI,(A0)
  614.  
  615.           LEA.L        CURPOS,A0
  616.           ADD.L        #1,(A0)
  617.           BRA          WAITKEY
  618. DISPFLASH:
  619.           MOVE.W       #12,D2
  620. LOOP0:    NEG.W        D2
  621.           BEQ          WAITKEY
  622.           BLT          AA9
  623.           SUB.W        #2,D2
  624. AA9:      ADD.W        #1,D2
  625.           MOVE.L       GFXBASE,A6
  626.           LEA.L        THEVPORT,A0
  627.           ADD.W        D2,vp_DxOffset(A0)
  628.           CALLSYS      ScrollVPort
  629.           LEA.L        THEVPORT,A0
  630.           SUB.W        D2,vp_DxOffset(A0)
  631.           BRA          LOOP0
  632. EXITSTRING:
  633.           MOVEM.L      (SP)+,D0-D7/A0-A6
  634.           RTS
  635. *****************************************************************************
  636. *         putstring                                                         *
  637. *****************************************************************************
  638. PUTSTRING:
  639.           MOVEM.L      D0-D7/A0-A6,-(SP)
  640.  
  641.           LEA.L        STRING,A0
  642.           LEA.L        STRING2,A1
  643.           MOVE.L       LENSTR,D0           ;+1 extra byte to display
  644. AA14:     MOVE.B       (A0)+,(A1)+
  645.           CMP.B        #' ',-1(A0)         
  646.           BEQ          AA15
  647.           MOVE.B       #'*',-1(A1)
  648. AA15      DBF          D0,AA14 
  649.  
  650.  
  651.           MOVE.L       GFXBASE,A6
  652.           LEA.L        THERASTPORT,A1
  653.           MOVE.L       #14,D0
  654.           CALLSYS      SetAPen
  655.  
  656.           LEA.L        THERASTPORT,A1
  657.           MOVE.L       #15,D0
  658.           CALLSYS      SetBPen
  659.  
  660.           LEA.L        THERASTPORT,A1
  661.           MOVE.L       LOCX,D0
  662.           MOVE.L       LOCY,D1
  663.           CALLSYS      Move                    ;set pen position
  664.  
  665.           LEA.L        THERASTPORT,A1
  666.           LEA.L        STRING2,A0
  667.           MOVE.L       LENSTR,D0
  668.           ADD.L        #1,D0
  669.           CALLSYS      Text                    ;write text
  670.  
  671.           LEA.L        THERASTPORT,A1
  672.           MOVE.L       #13,D0
  673.           CALLSYS      SetAPen
  674.  
  675.           LEA.L        THERASTPORT,A1
  676.           MOVE.L       #12,D0
  677.           CALLSYS      SetBPen
  678.  
  679.           LEA.L        THERASTPORT,A1
  680.           MOVE.L       CURPOS,D0
  681.           LSL.L        #3,D0                   ;mul font X size
  682.           ADD.L        LOCX,D0
  683.           MOVE.L       LOCY,D1
  684.           CALLSYS      Move                    ;set pen position
  685.  
  686.           LEA.L        THERASTPORT,A1
  687.           LEA.L        STRING2,A0
  688.           ADD.L        CURPOS,A0
  689.           MOVE.L       #1,D0
  690.           CALLSYS      Text                    ;write text
  691.  
  692.           MOVEM.L      (SP)+,D0-D7/A0-A6
  693.           RTS
  694. *****************************************************************************
  695. *         read keyboard event                         ret: KEYRAW, KEYANSI  *
  696. *****************************************************************************
  697. READKEY:
  698.           MOVEM.L      D0-D7/A0-A6,-(SP)
  699. WAITE:    LEA.L        EVENTFLAG,A0
  700.           MOVE.L       (A0),D0
  701.           BEQ          WAITE
  702.           CLR.L        (A0)
  703.  
  704.           MOVE.L       D0,A0
  705.           LEA.L        KEYRAW,A1
  706.           MOVE.W       ie_Code(A0),2(A1)
  707.           AND.L        #$FF,(A1)
  708.           CMP.L        #$7F,(A1)
  709.           BHI          WAITE
  710.  
  711.           MOVE.L       KEYMAPBASE,A6
  712.           MOVE.L       D0,A0
  713.           LEA.L        KEYANSI,A1
  714.           MOVE.L       #4,D1
  715.           MOVE.L       #0,A2
  716.           CALLSYS      MapRawKey
  717.           TST.L        D0
  718.           BEQ          WAITE
  719.           BMI          ERROR
  720.  
  721.           MOVEM.L      (SP)+,D0-D7/A0-A6
  722.           RTS
  723. *****************************************************************************
  724. *         input handler                                                     *
  725. *****************************************************************************
  726. INPUTHANDLER:
  727.           CMP.B        #IECLASS_RAWKEY,ie_Class(A0)
  728.           BNE          NEXTEVENT
  729.           MOVE.L       A0,(A1)                     ;save input event
  730. NEXTEVENT:
  731.           MOVE.L       ie_NextEvent(A0),D0
  732.           MOVE.L       D0,A0
  733.           BNE          INPUTHANDLER
  734.  
  735.           MOVE.L       #0,D0                       ;return event list or NULL
  736.           RTS
  737. *****************************************************************************
  738. *          software reset                                                   *
  739. *****************************************************************************
  740. RESET1:
  741.           MOVE.L       ($4),A6
  742.           MOVE.L       #LENCOP,D0
  743.           MOVE.L       #MEMF_CHIP,D1
  744.           CALLSYS      AllocMem
  745.           MOVE.L       D0,MYCOP
  746.           BEQ          ERROR
  747.           BSR          SETCOP
  748.  
  749.           LEA.L        SUPMOD,A0
  750.           MOVE.L       A0,($80)
  751.           TRAP         #0
  752. SUPMOD:   MOVE.W       #$2700,SR
  753.           CLR.L        $4
  754.           LEA.L        $F80002.L,A0
  755.           BRA          RESETVEC
  756.           CNOP         0,4
  757. RESETVEC: RESET
  758.           JMP          (A0)
  759. *****************************************************************************
  760. *         creat copper list                                                 *
  761. *****************************************************************************
  762. SETCOP:
  763.           LEA.L        $DFF000.L,A6
  764.           MOVE.W       #BITCLR|DMAF_RASTER|DMAF_SPRITE,dmacon(A6)
  765.  
  766.           MOVE.L       MYCOP,A0
  767.           MOVE.L       #LINESTART,D1
  768.           MOVE.W       #LINECOUNT,D2
  769.           SUB.W        #1,D2
  770. L004:
  771.           MOVE.L       #$0035FFFE,(A0)
  772.           MOVE.B       D1,(A0)
  773.           ADD.L        #4,A0
  774.           MOVE.L       #$01800000,(A0)+
  775.  
  776.           MOVE.W       #46,D4
  777.           SUB.W        #1,D4
  778. L325:     MOVE.L       #$01BE0000,(A0)+
  779.           DBF          D4,L325
  780.  
  781.           ADD.L        #1,D1
  782.           DBF          D2,L004
  783.  
  784.           MOVE.L       #$01800000,(A0)+
  785.           MOVE.L       #$FFFFFFFE,(A0)
  786.  
  787.           MOVE.L       MYCOP,A0
  788.           MOVE.L       A0,cop1lc(A6)
  789.           MOVE.W       #0,copjmp1(A6)
  790.           MOVE.W       #BITSET|DMAF_MASTER|DMAF_COPPER,dmacon(A6)
  791. *****************************************************************************
  792. *         renklendirme                                                      *
  793. *****************************************************************************
  794.           CLR.L        D0
  795.           MOVE.W       vhposr(A6),D0
  796.           DIVU.W       #COLOREND-COLORS,D0
  797.           CLR.W        D0
  798.           SWAP         D0
  799.           BCLR.L       #0,D0
  800.           LEA.L        COLORPTR,A0
  801.           MOVE.L       D0,(A0)
  802. L16:
  803.           LEA.L        COLORPTR,A1
  804.           ADD.L        #2,(A1)
  805.           CMP.L        #(COLOREND-COLORS),(A1)
  806.           BLT          L77
  807.           SUB.L        #(COLOREND-COLORS),(A1)
  808. L77:
  809.           MOVE.L       (A1),D3
  810.           MOVE.L       D3,D1
  811.           LEA.L        COLORS,A1
  812.           MOVE.L       MYCOP,A0
  813.           ADD.L        #6,A0
  814.           MOVE.W       #LINECOUNT-1,D2
  815. L15:
  816.           MOVE.L       D2,D4
  817.           DIVU.W       #11,D4
  818.           SWAP         D4
  819.           TST.W        D4
  820.           BNE          L676
  821.           ADD.L        #2,D3
  822.           CMP.L        #(COLOREND-COLORS),D3
  823.           BLT          L678
  824.           MOVE.L       #0,D3
  825. L678:     MOVE.L       D3,D1
  826. L676:
  827.           MOVE.W       (A1,D1.L),(A0)
  828.           ADD.L        #48*4,A0
  829.  
  830.           ADD.L        #2,D1
  831.           CMP.L        #(COLOREND-COLORS),D1
  832.           BLT          L777
  833.           MOVE.L       #0,D1
  834. L777:     DBF          D2,L15
  835.  
  836.           BSR          WBLANK
  837.           TST.L        D0
  838.           BEQ          L16
  839.  
  840.           MOVE.W       #BITCLR|DMAF_COPPER,dmacon(A6)
  841.           NOP
  842.           NOP
  843.           MOVE.W       #0,color(A6)
  844.           RTS
  845. *****************************************************************************
  846. *         wait vertical blank                                               *
  847. *****************************************************************************
  848. WBLANK:
  849.           MOVE.L       vposr(A6),D0
  850.           LSR.L        #8,D0
  851.           AND.W        #$07FF,D0
  852.           CMP.W        #LINESTART+LINECOUNT,D0
  853.           BNE          WBLANK
  854.  
  855.           MOVE.L       COUNTVB,D0
  856.           ADD.L        #1,D0
  857.           DIVU.W       #55,D0
  858.           SWAP         D0
  859.           MOVE.W       D0,COUNTVB+2
  860.           BEQ          OKCNT
  861.  
  862.           MOVEQ.L      #0,D0
  863.           RTS
  864. OKCNT:    MOVEQ.L      #-1,D0
  865.           RTS
  866. *****************************************************************************
  867. *         error                                                             *
  868. *****************************************************************************
  869. ERROR:
  870.            LEA.L       SUPMOD1,A0
  871.            MOVE.L      A0,($80)
  872.            TRAP        #0
  873. SUPMOD1:   MOVE.W      #$2700,SR
  874.            MOVE.W      #$7FFF,($DFF000+dmacon)
  875.            CLR.L       $4
  876. WAIT2:     MOVE.W      #$00CC,($DFF000+color)
  877.            MOVE.W      #$0000,($DFF000+color)
  878.            BRA         WAIT2
  879. *****************************************************************************
  880. *         module data                                                       *
  881. *****************************************************************************
  882. THEVIEW     DCB.B      v_SIZEOF              ;STRUCTURE View,v_SIZEOF
  883. THEVPORT    DCB.B      vp_SIZEOF             ;STRUCTURE ViewPort,vp_SIZEOF
  884. THEBITMAP   DCB.B      bm_SIZEOF             ;STRUCTURE BitMap,bm_SIZEOF
  885. THERASINFO  DCB.B      ri_SIZEOF             ;STRUCTURE RasInfo,ri_SIZEOF
  886. THERASTPORT DCB.B      rp_SIZEOF             ;STRUCTURE RastPort,rp_SIZEOF
  887. TEXTATTR    DCB.B      ta_SIZEOF             ;STRUCTURE TextAttr,ta_SIZEOF
  888. INTSTRUCT   DCB.B      IS_SIZE               ;STRUCTURE IS,IS_SIZE
  889. INPUTHAND   DCB.B      IS_SIZE               ;STRUCTURE IS,IS_SIZE
  890. THETASK     DCB.B      TC_SIZE               ;STRUCTURE TC_Struct,TC_SIZE
  891.  
  892. MYSEMAFOR:
  893.             DCB.B      SS_SIZE               ;STRUCTURE SS,SS_SIZE
  894. RETCODE     DC.L       0
  895. SEMANAME    DC.B       'orpsw',0
  896. LENSEMA     EQU        *-MYSEMAFOR
  897.  
  898. THEMEMLIST:                                  ;for task stack
  899.             DCB.B      LN_SIZE               ;STRUCTURE ML,LN_SIZE
  900.             DC.W       1                     ;UWORD ML_NUMENTRIES
  901.             DC.L       MEMF_PUBLIC           ;LABEL ML_ME      (ME_REQS)
  902.             DC.L       2048                  ;                 (ME_LENGTH)
  903.                                              ;LABEL ML_SIZE
  904.  
  905. KEY_ESC     EQU        $45
  906. KEY_ENTER   EQU        $44
  907. KEY_F1      EQU        $50
  908. KEY_F2      EQU        $51
  909. KEY_DELETE  EQU        $46
  910. KEY_UP      EQU        $4C
  911. KEY_DOWN    EQU        $4D
  912. KEY_LEFT    EQU        $4F
  913. KEY_RIGHT   EQU        $4E
  914. KEY_BACKSPACE EQU      $41
  915.  
  916. SIGBIT      DC.L       0
  917. INPUTPORT   DC.L       0
  918. TRACKPORT   DC.L       0
  919. INPUTREQ    DC.L       0
  920. TRACKREQ    DC.L       0
  921. OPENSTATUSI DC.L       0
  922. MYTASK      DC.L       0
  923. SEMADR      DC.L       0
  924. SAVEDMA     DC.W       0
  925. STARTFLAG   DC.L       0
  926. SOUNDFLAG   DC.L       0
  927. EVENTFLAG   DC.L       0
  928. KEYRAW      DC.L       0
  929. KEYANSI     DC.L       0
  930. OLDVIEW     DC.L       0
  931. LOCX        DC.L       0
  932. LOCY        DC.L       0
  933. CURPOS      DC.L       0
  934. CHRPOS      DC.L       0
  935. LENSTR      DC.L       0
  936. STRADR      DC.L       0
  937. FONTTEXT    DC.L       0
  938. GFXBASE     DC.L       0
  939. KEYMAPBASE  DC.L       0
  940. UTILBASE    DC.L       0
  941. CONNAME     DC.B       'CON',0
  942. FSNAME      DC.B       'filesystem',0
  943. GFXNAME     DC.B       'graphics.library',0
  944. DOSNAME     DC.B       'dos.library',0
  945. FONTNAME    DC.B       'topaz.font',0
  946. INPUTNAME   DC.B       'input.device',0
  947. KEYMAPNAME  DC.B       'keymap.library',0
  948. UTILNAME    DC.B       'utility.library',0
  949. TRACKNAME   DC.B       'trackdisk.device',0
  950. STRING      DCB.B      20
  951. STRING2     DCB.B      20
  952. USERID      DCB.B      20
  953. TEXT0       DC.B       'RESET   '
  954. TEXT1       DC.B       'FLAME   '
  955. TEXT2       DC.B       'ZONE    '
  956. VERSION     DC.B       '$VER: Orpsw 1.0 (12.01.95) © by OR',13,10,0
  957.             EVEN
  958.  
  959. LINESTART EQU          28
  960. LINECOUNT EQU          280
  961. LENCOP    EQU          55*1024
  962. COUNTVB   DC.L         0
  963. COLORPTR  DC.L         0
  964. MYCOP     DC.L         0
  965. COLORS:
  966.           DC.W         $110,$220,$330,$440,$550,$660,$770
  967.           DC.W         $880,$990,$AA0,$BB0,$CC0,$DD0,$EE0,$FF0
  968.           DC.W         $EE0,$DD0,$CC0,$BB0,$AA0,$990,$880
  969.           DC.W         $770,$660,$550,$440,$330,$220,$110
  970.  
  971.           DC.W         $101,$202,$303,$404,$505,$606,$707
  972.           DC.W         $808,$909,$A0A,$B0B,$C0C,$D0D,$E0E,$F0F
  973.           DC.W         $E0E,$D0D,$C0C,$B0B,$A0A,$909,$808
  974.           DC.W         $707,$606,$505,$404,$303,$202,$101
  975.  
  976.           DC.W         $111,$222,$333,$444,$555,$666,$777
  977.           DC.W         $888,$999,$AAA,$BBB,$CCC,$DDD,$EEE,$FFF
  978.           DC.W         $EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  979.           DC.W         $777,$666,$555,$444,$333,$222,$111
  980.  
  981.           DC.W         $011,$022,$033,$044,$055,$066,$077
  982.           DC.W         $088,$099,$0AA,$0BB,$0CC,$0DD,$0EE,$0FF
  983.           DC.W         $0EE,$0DD,$0CC,$0BB,$0AA,$099,$088
  984.           DC.W         $077,$066,$055,$044,$033,$022,$011
  985.  
  986.           DC.W         $001,$002,$003,$004,$005,$006,$007
  987.           DC.W         $008,$009,$00A,$00B,$00C,$00D,$00E,$00F
  988.           DC.W         $00E,$00D,$00C,$00B,$00A,$009,$008
  989.           DC.W         $007,$006,$005,$004,$003,$002,$001
  990.  
  991.           DC.W         $010,$020,$030,$040,$050,$060,$070
  992.           DC.W         $080,$090,$0A0,$0B0,$0C0,$0D0,$0E0,$0F0
  993.           DC.W         $0E0,$0D0,$0C0,$0B0,$0A0,$090,$080
  994.           DC.W         $070,$060,$050,$040,$030,$020,$010
  995.  
  996.           DC.W         $100,$200,$300,$400,$500,$600,$700
  997.           DC.W         $800,$900,$A00,$B00,$C00,$D00,$E00,$F00
  998.           DC.W         $E00,$D00,$C00,$B00,$A00,$900,$800
  999.           DC.W         $700,$600,$500,$400,$300,$200,$100
  1000. COLOREND:
  1001.           INCLUDE     "aa.raw.asm"
  1002.           END
  1003.