	.module shell.c
	.area data
_error:
	.blkb 21
	.area idata
	.byte 's,'h,'e,'l,'l,58,32,'o,'u,'t,32,'o,'f,32,'m,'e
	.byte 'm,'o,'r,'y,0
	.area data
	.blkb 20
	.area idata
	.byte 's,'h,'e,'l,'l,58,32,'s,'y,'n,'t,'a,'x,32,'e,'r
	.byte 'r,'o,'r,0
	.area data
	.blkb 1
	.area idata
	.byte 0
	.area data
	.blkb 20
	.area idata
	.byte 's,'h,'e,'l,'l,58,32,51,50,32,'c,'h,'a,'r,'s,32
	.byte 'm,'a,'x,0
	.area data
	.blkb 1
	.area idata
	.byte 0
	.area data
	.blkb 21
	.area idata
	.byte 's,'h,'e,'l,'l,58,32,'u,'n,'i,'m,'p,'l,'i,'m,'e
	.byte 'n,'t,'e,'d,0
	.area data
	.area text
;          ?temp -> -49,x
;          ?temp -> -47,x
;     cmd_length -> -46,x
;            cmd -> -44,x
;           argc -> -43,x
;           argv -> -41,x
;        cursor1 -> -39,x
;              j -> -37,x
;        cursor2 -> -36,x
;        command -> -34,x
;              i -> -1,x
_shell::
	pshx
	tfr s,x
	leas -60,sp
; // shell.c
; 
; 
; #include <912d60.h>
; #include <stdio.h>
; #include <stdlib.h>
; #include <string.h>
; #include <ctype.h>
; #include "kernel.h"
; #include "semlib.h"
; 
; 
; 
; 
; // FUNCTION PROTOTYPES
; void shellcmd_help(char *argv1);
; void shellcmd_tcb(void);
; void shellcmd_rcb(void);
; void shellcmd_ticks(void);
; void shellcmd_start_task(unsigned char id);
; 
; /*void shellcmd_stop_task(unsigned char id);
; void shellcmd_set_task_priority(unsigned char id, unsigned char priority);
; void shellcmd_quit_shell(void);*/
; 
; 
; 
; 
; // GLOBAL VARIABLES
; extern unsigned long int system_tick;
; extern unsigned int current;		   	 	// current task id number
; 
; 
; // LOCAL GLOBAL VARIABLES (context is this file only)
; static char error[4][21] = {"shell: out of memory",	   // error[0]
; 		 			  	 "shell: syntax error",		   // error[1]
; 						 "shell: 32 chars max",		   // error[2]
; 						 "shell: unimplimented"		   // error[3]
; 						 };
; 
; 
; void shell(void) {
; 	
; 	// LOCAL CONSTANTS
; 	#define cmd_size (32+1)
; 
; 	
; 	
; 	// LOCAL ENUMERATIONS
; 	enum command_type {	help = 1,
; 		 			  	tcb, 
; 		 			  	rcb, 
; 						ticks,
; 						start,
; 						stop,
; 						priority,
; 						quit
; 	};
; 						
; 		
; 						
; 	// LOCAL VARIABLES
; 	char command[cmd_size], i, j, **argv, *cursor1, *cursor2;
; 	int cmd_length, argc;
; 	enum command_type cmd;
; 	
; 	
; 	
; 	
; 	// INITIALIZE SHELL
; 	sem_get(COM1);		  // get comm port 1 semaphore
	ldd #0
	jsr _sem_get
; 	INTR_ON();			  // enable interrupts
		cli

	lbra L5
L4:
; 	
; 	
; 	
; 	// SHELL COMMAND LINE INTERPRETER
; 	while (1) {
; 	
; 		  i = 0;
	clr -1,x
; 		  cursor1 = command;
	leay -34,x
	sty -39,x
; 		  cursor2 = command;
	leay -34,x
	sty -36,x
; 		  
; 		  
; 		  // put a PROMPT
; 		  putchar('>'); putchar('>'); putchar(' ');
	ldd #62
	jsr _putchar
	ldd #62
	jsr _putchar
	ldd #32
	jsr _putchar
	bra L8
L7:
; 		  
; 		  
; 		  // GET AND ECHO THE COMMAND on the console
; 		  while (((command[i]=getchar()) != 0xD) && (i<cmd_size)) {
; 		  		putchar(command[i]);
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	clra
	jsr _putchar
; 				
; 				// allow backspace to correct typing mistakes
; 				if (command[i] == 8) {
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	cmpb #8
	bne L10
; 				    putchar(32);  		 // space
	ldd #32
	jsr _putchar
; 					putchar(8);			 // backspace
	ldd #8
	jsr _putchar
; 					command[i] = '\0';	 // null
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	clr 0,y
; 					i--;
	ldab -1,x
	clra
	subd #1
	stab -1,x
; 				} else
	bra L11
L10:
; 				  	i++;
	ldab -1,x
	clra
	addd #1
	stab -1,x
L11:
L8:
	jsr _getchar
	stab -47,x
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab -47,x
	stab 0,y
	ldab -47,x
	cmpb #13
	beq L12
	ldab -1,x
	cmpb #33
	lblo L7
L12:
; 		  }
; 		  // terminate the string
; 		  command[i] = NULL;
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	clr 0,y
; 		  putchar('\n');
	ldd #10
	jsr _putchar
; 		  
; 		  
; 		  
; 		  // PUT COMMAND LINE INTO ARGV & ARGC to extract cmd/args		  
; 		  // make argc and argv arrays according to the command line input
; 		  i = 0;
	clr -1,x
; 		  argc = 1;
	ldd #1
	std -43,x
	bra L14
L13:
; 		  
; 		  // count command + args: argc
; 		  while (command[i] != NULL) {
; 		  		if (command[i] == ' ') 
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	cmpb #32
	bne L16
; 				   argc++;
	ldd -43,x
	addd #1
	std -43,x
L16:
	ldab -1,x
	clra
	addd #1
	stab -1,x
L14:
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	tst 0,y
	bne L13
; 				i++;
; 		  }
; 		  
; 		  
; 		  // allocate memory to argv
; 		  if ((argv = malloc(argc)) == NULL) {
	ldd -43,x
	jsr _malloc
	std -52,x
	std -41,x
	ldd -52,x
	bne L18
; 		  	 puts(error[0]);
	ldd #_error
	jsr _puts
; 			 exit(1);
	ldd #1
	jsr _exit
; 		  }
L18:
; 	 
;  
; 		  // extract the cmd/args
; 		  i = 0;
	clr -1,x
	clr -37,x
	lbra L23
X0:
; 		  for (j=0; j<argc; j++) {
L24:
	ldab -1,x
	clra
	addd #1
	stab -1,x
	ldd -36,x
	addd #1
	std -36,x
L25:
; 		  	  
; 			  // search command for letters/numbers
; 			  while (isalnum(command[i])) {
	leay -34,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	xgdy
	ldab 0,y
	clra
	jsr _isalnum
	cpd #0
	bne L24
; 			  		i++;
; 					cursor2++;
; 			  }
; 			  
; 
; 			  // found a cmd/arg, so make a string array for it
; 			  // must manually add a NULL char to the end
; 		  	  if ((argv[j] = malloc(cursor2 - cursor1 + 1)) == NULL) {
	ldd -36,x
	subd -39,x
	addd #1
	jsr _malloc
	std -54,x
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd -54,x
	std 0,y
	ldd -54,x
	bne L27
; 			  	 puts(error[0]);
	ldd #_error
	jsr _puts
; 				 exit(1);
	ldd #1
	jsr _exit
; 			  }
L27:
	ldd -36,x
	subd -39,x
	addd #1
	std 2,sp
	ldy -39,x
	sty 0,sp
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd 0,y
	jsr _memmove
	ldab -37,x
	clra
	lsld
	addd -41,x
	xgdy
	ldab -1,x
	clra
	addd 0,y
	xgdy
	clr 0,y
	leay -33,x
	sty -56,x
	ldab -1,x
	clra
	addd -56,x
	std -39,x
	ldy -39,x
	sty -36,x
	ldab -1,x
	clra
	addd #1
	stab -1,x
L21:
	ldab -37,x
	clra
	addd #1
	stab -37,x
L23:
	ldab -37,x
	clra
	cpd -43,x
	lblt L25
; 
; 			  
; 			  // move finding to argv[j] array, and add NULL char
; 			  memmove(argv[j], cursor1, cursor2 - cursor1 + 1);
; 			  argv[j][i] = NULL;
; 			  
; 			  // update cursors
; 		  	  cursor1 = command + i + 1;
; 			  cursor2 = cursor1;
; 			  i++;
; 			   
; 		  }  // end for j
; 		  
; 		  
; 		  
; 		  // CLASSIFY THE COMMAND
; 		  if (command[0] == 0xD);	 // CR, so start over
	ldab -34,x
	cmpb #13
	bne L30
	lbra L31
L30:
; 		  else if (strcmp(argv[0], "help") == 0)
	ldd #L34
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L32
; 		  	   cmd = help;
	ldab #1
	stab -44,x
	lbra L33
L32:
; 		  else if (strcmp(argv[0], "tcb") == 0)
	ldd #L37
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L35
; 		  	   cmd = tcb;
	ldab #2
	stab -44,x
	lbra L36
L35:
; 		  else if (strcmp(argv[0], "rcb") == 0)
	ldd #L40
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L38
; 		  	   cmd = rcb;
	ldab #3
	stab -44,x
	lbra L39
L38:
; 		  else if (strcmp(argv[0], "ticks") == 0)
	ldd #L43
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L41
; 		  	   cmd = ticks;
	ldab #4
	stab -44,x
	lbra L42
L41:
; 		  else if (strcmp(argv[0], "start") == 0)
	ldd #L46
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L44
; 		  	   cmd = start;
	ldab #5
	stab -44,x
	bra L45
L44:
; 		  else if (strcmp(argv[0], "stop") == 0)
	ldd #L49
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L47
; 		  	   cmd = stop;
	ldab #6
	stab -44,x
	bra L48
L47:
; 		  else if (strcmp(argv[0], "priority") == 0)
	ldd #L52
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L50
; 		  	   cmd = priority;
	ldab #7
	stab -44,x
	bra L51
L50:
; 		  else if (strcmp(argv[0], "quit") == 0)
	ldd #L55
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L53
; 		  	   cmd = quit;
	ldab #8
	stab -44,x
	bra L54
L53:
; 		  else if (strcmp(argv[0], "") == 0) 
	ldd #L58
	std 0,sp
	ldd [-41,x]
	jsr _strcmp
	cpd #0
	bne L56
; 		  	   cmd = 0;
	clr -44,x
	bra L57
L56:
; 		  else {
; 		  	   puts(error[1]); 
	ldd #_error+21
	jsr _puts
; 			   putchar('\n');
	ldd #10
	jsr _putchar
; 			   cmd = 0;
	clr -44,x
; 		  }
L57:
L54:
L51:
L48:
L45:
L42:
L39:
L36:
L33:
L31:
; 		
; 		
; 		  // CLASSIFY/VALIDATE THE PARAMETERS and DISPATCH the command
; 		  if (cmd) {
	tst -44,x
	lbeq L60
	ldab -44,x
	clra
	std -49,x
	cpd #1
	beq L65
	ldd -49,x
	cpd #2
	lbeq L81
	ldd -49,x
	cpd #3
	lbeq L87
	ldd -49,x
	cpd #4
	lbeq L89
	ldd -49,x
	cpd #5
	lbeq L93
	ldd -49,x
	cpd #6
	lbeq L98
	ldd -49,x
	cpd #7
	lbeq L100
	ldd -49,x
	cpd #8
	lbeq L102
	lbra L63
X1:
; 		  switch (cmd) {
L65:
; 		   		 case help:
; 				 	  if (argc == 1) {
	ldd -43,x
	cpd #1
	bne L66
; 					  	 puts("---HELP---\n");
	ldd #L68
	jsr _puts
; 					  	 puts("<> -- required arguments");
	ldd #L69
	jsr _puts
; 					  	 puts("[] -- optional arguments\n");
	ldd #L70
	jsr _puts
; 					  	 puts("help [cmd] -- help on a specific command");
	ldd #L71
	jsr _puts
; 					  	 puts("tcb [task_id] -- prints task control block");
	ldd #L72
	jsr _puts
; 					  	 puts("rcb [task_id] -- prints resource control block");
	ldd #L73
	jsr _puts
; 					 	 puts("ticks -- shows system tick");
	ldd #L74
	jsr _puts
; 					  	 puts("start <task_id> -- start a task");
	ldd #L75
	jsr _puts
; 					  	 puts("stop <task_id>  -- stop a task");
	ldd #L76
	jsr _puts
; 					 	 puts("priority <task_id, task_priority>  -- change prio");
	ldd #L77
	jsr _puts
; 					 	 puts("quit -- quit the shell (carefull!)");
	ldd #L78
	jsr _puts
; 					 	 putchar('\n');
	ldd #10
	jsr _putchar
; 					  }
	lbra L63
L66:
; 					  else if (argc == 2) 
	ldd -43,x
	cpd #2
	lbne L63
; 					  	   shellcmd_help(argv[1]);
	ldy -41,x
	ldd 2,y
	jsr _shellcmd_help
; 				  	  break;
	lbra L63
L81:
; 				 case tcb:
; 				 	  if (argc == 1)
	ldd -43,x
	cpd #1
	bne L82
; 				  	  	 shellcmd_tcb();
	jsr _shellcmd_tcb
	bra L63
L82:
; 					  else if (argc > 1)
	ldd -43,x
	cpd #1
	ble L63
; 					  	   puts(error[3]);
	ldd #_error+63
	jsr _puts
; 				  	  break;
	bra L63
L87:
; 				 case rcb:
; 				 	  puts(error[3]);
	ldd #_error+63
	jsr _puts
; 				  	  break;
	bra L63
L89:
; 				 case ticks:
; 				 	  if (argc > 1)
	ldd -43,x
	cpd #1
	ble L90
; 					  	 puts(error[1]);
	ldd #_error+21
	jsr _puts
	bra L63
L90:
; 					  else
; 				  	  	  shellcmd_ticks();
	jsr _shellcmd_ticks
; 					  break;
	bra L63
L93:
; 				 case start:
; 				 	  if ((argc != 2) || 
	ldd -43,x
	cpd #2
	bne L96
	ldy -41,x
	ldy 2,y
	ldab 0,y
	clra
	jsr _isdigit
	cpd #0
	bne L94
L96:
; 					  	 (!isdigit(*argv[1])))
; 					  	 puts(error[1]);
	ldd #_error+21
	jsr _puts
	bra L63
L94:
; 					  else
; 				  	  	shellcmd_start_task(atoi(argv[1]));
	ldy -41,x
	ldd 2,y
	jsr _atoi
	clra
	jsr _shellcmd_start_task
; 					  break;
	bra L63
L98:
; 				 case stop:
; 				 	  puts(error[3]);
	ldd #_error+63
	jsr _puts
; 				 	  break;
	bra L63
L100:
; 				 case priority:
; 				 	  puts(error[3]);
	ldd #_error+63
	jsr _puts
; 				 	  break;
	bra L63
L102:
; 				 case quit:
; 				 	  puts(error[3]);
	ldd #_error+63
	jsr _puts
; 				 	  break;
; 				 default:
; 				  	  break;
L63:
; 		  }}
L60:
; 		  
; 		
; 		
; 		  // free the argc and argv array memory
; 		  for (i=0; i<argc; i++)
	clr -1,x
	bra L107
L104:
	ldab -1,x
	clra
	lsld
	addd -41,x
	xgdy
	ldd 0,y
	jsr _free
L105:
	ldab -1,x
	clra
	addd #1
	stab -1,x
L107:
	ldab -1,x
	clra
	cpd -43,x
	blt L104
	ldd -41,x
	jsr _free
	ldd #10
	jsr _putchar
L5:
	lbra L4
X2:
; 		  	  free(argv[i]);
; 		  free(argv);
; 		  
; 		  putchar('\n');
; 		  
; 	}  // end while(1)
; 	
; 	
; 	INTR_OFF();
		sei

; 	sem_give(COM1);
	ldd #0
	jsr _sem_give
; 	
; }
L3:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;          argv1 -> 2,x
_shellcmd_help::
; 
; 
; 
; 
; void shellcmd_help(char *argv1) {
; 
; 	 puts(error[3]);
	ldd #_error+63
	jsr _puts
; }
L108:
	.dbline 0 ; func end
	rts
;             id -> -2,x
_shellcmd_tcb::
	pshx
	tfr s,x
	leas -10,sp
; 
; 
; 
; void shellcmd_tcb(void) {
; 
; 	 // LOCAL VARIABLES
; 	 int id;
; 
; 	 
; 	 /* this takes a while, so treat as a critical section in order
; 	 	to get reliable data  */
; 	 INTR_OFF();
		sei

	ldd #0
	std -2,x
L111:
	ldd #L115
	jsr _puts
	ldd -2,x
	clra
	jsr _get_task_state
	std -4,x
	ldd -2,x
	clra
	jsr _get_task_priority
	clra
	std 4,sp
	ldd -4,x
	clra
	std 2,sp
	movw -2,x,0,sp
	ldd #L116
	jsr _printf
L112:
; 	 
; 	 for (id=0; id<numtasks; id++) {
	ldd -2,x
	addd #1
	std -2,x
	ldd -2,x
	cpd #3
	blt L111
; 	 puts  ("----------+----------+----------+");
; 	 
; 	 printf("TaskID: %d | State: %d | Prio: %d\n", id,
; 	 				 	  		 	  			   get_task_state(id),
; 												   get_task_priority(id));
; 	 }
; 	 
; 	 
; 	 puts  ("----------+----------+----------+");
	ldd #L115
	jsr _puts
; 	 puts("Idle=0, Pending=1, Running=2, Waiting=3, Finished=4");
	ldd #L117
	jsr _puts
; 
; 	 // finished with critical section
; 	 INTR_ON();
		cli

; 	 
; 	 
; }
L110:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;  lreg1 -> -4,x
;  lreg2 -> -8,x
_shellcmd_ticks::
	pshx
	tfr s,x
	leas -12,sp
; 
; 
; 
; 
; void shellcmd_ticks(void) {
; 	 
; 	 INTR_OFF();
		sei

; 	 printf("Ticks: %ld\n", system_tick);
	ldy #_system_tick
	movw 0,y,-4,x
	movw 2,y,-2,x
	leay 0,sp
	movw -4,x,0,y
	movw -2,x,2,y
	ldd #L119
	jsr _printf
; 	 INTR_ON();
		cli

; }
L118:
	tfr x,s
	pulx
	.dbline 0 ; func end
	rts
;             id -> 3,x
_shellcmd_start_task::
	pshd
	pshx
	tfr s,x
	leas -2,sp
; 
; 
; 
; 
; void shellcmd_start_task(unsigned char id) {
; 
; 	 if (set_task_state(id, pending) == 0)
	ldd #1
	std 0,sp
	ldab 3,x
	clra
	jsr _set_task_state
	cpd #0
	bne L121
; 	  	 printf("task %d started\n", id);
	ldab 3,x
	clra
	std 0,sp
	ldd #L123
	jsr _printf
L121:
; }
L120:
	tfr x,s
	pulx
	leas 2,sp
	.dbline 0 ; func end
	rts
L123:
	.byte 't,'a,'s,'k,32,37,'d,32,'s,'t,'a,'r,'t,'e,'d,10
	.byte 0
L119:
	.byte 'T,'i,'c,'k,'s,58,32,37,'l,'d,10,0
L117:
	.byte 'I,'d,'l,'e,61,48,44,32,'P,'e,'n,'d,'i,'n,'g,61
	.byte 49,44,32,'R,'u,'n,'n,'i,'n,'g,61,50,44,32,'W,'a
	.byte 'i,'t,'i,'n,'g,61,51,44,32,'F,'i,'n,'i,'s,'h,'e
	.byte 'd,61,52,0
L116:
	.byte 'T,'a,'s,'k,'I,'D,58,32,37,'d,32,124,32,'S,'t,'a
	.byte 't,'e,58,32,37,'d,32,124,32,'P,'r,'i,'o,58,32,37
	.byte 'd,10,0
L115:
	.byte 45,45,45,45,45,45,45,45,45,45,43,45,45,45,45,45
	.byte 45,45,45,45,45,43,45,45,45,45,45,45,45,45,45,45
	.byte 43,0
L78:
	.byte 'q,'u,'i,'t,32,45,45,32,'q,'u,'i,'t,32,'t,'h,'e
	.byte 32,'s,'h,'e,'l,'l,32,40,'c,'a,'r,'e,'f,'u,'l,'l
	.byte 33,41,0
L77:
	.byte 'p,'r,'i,'o,'r,'i,'t,'y,32,60,'t,'a,'s,'k,95,'i
	.byte 'd,44,32,'t,'a,'s,'k,95,'p,'r,'i,'o,'r,'i,'t,'y
	.byte 62,32,32,45,45,32,'c,'h,'a,'n,'g,'e,32,'p,'r,'i
	.byte 'o,0
L76:
	.byte 's,'t,'o,'p,32,60,'t,'a,'s,'k,95,'i,'d,62,32,32
	.byte 45,45,32,'s,'t,'o,'p,32,'a,32,'t,'a,'s,'k,0
L75:
	.byte 's,'t,'a,'r,'t,32,60,'t,'a,'s,'k,95,'i,'d,62,32
	.byte 45,45,32,'s,'t,'a,'r,'t,32,'a,32,'t,'a,'s,'k,0
L74:
	.byte 't,'i,'c,'k,'s,32,45,45,32,'s,'h,'o,'w,'s,32,'s
	.byte 'y,'s,'t,'e,'m,32,'t,'i,'c,'k,0
L73:
	.byte 'r,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45
	.byte 32,'p,'r,'i,'n,'t,'s,32,'r,'e,'s,'o,'u,'r,'c,'e
	.byte 32,'c,'o,'n,'t,'r,'o,'l,32,'b,'l,'o,'c,'k,0
L72:
	.byte 't,'c,'b,32,91,'t,'a,'s,'k,95,'i,'d,93,32,45,45
	.byte 32,'p,'r,'i,'n,'t,'s,32,'t,'a,'s,'k,32,'c,'o,'n
	.byte 't,'r,'o,'l,32,'b,'l,'o,'c,'k,0
L71:
	.byte 'h,'e,'l,'p,32,91,'c,'m,'d,93,32,45,45,32,'h,'e
	.byte 'l,'p,32,'o,'n,32,'a,32,'s,'p,'e,'c,'i,'f,'i,'c
	.byte 32,'c,'o,'m,'m,'a,'n,'d,0
L70:
	.byte 91,93,32,45,45,32,'o,'p,'t,'i,'o,'n,'a,'l,32,'a
	.byte 'r,'g,'u,'m,'e,'n,'t,'s,10,0
L69:
	.byte 60,62,32,45,45,32,'r,'e,'q,'u,'i,'r,'e,'d,32,'a
	.byte 'r,'g,'u,'m,'e,'n,'t,'s,0
L68:
	.byte 45,45,45,'H,'E,'L,'P,45,45,45,10,0
L58:
	.byte 0
L55:
	.byte 'q,'u,'i,'t,0
L52:
	.byte 'p,'r,'i,'o,'r,'i,'t,'y,0
L49:
	.byte 's,'t,'o,'p,0
L46:
	.byte 's,'t,'a,'r,'t,0
L43:
	.byte 't,'i,'c,'k,'s,0
L40:
	.byte 'r,'c,'b,0
L37:
	.byte 't,'c,'b,0
L34:
	.byte 'h,'e,'l,'p,0

